From eab5f2b5d023101d9e28343b37816b41e1e56e5f Mon Sep 17 00:00:00 2001 From: cdozdil Date: Wed, 11 Dec 2024 14:51:38 +0300 Subject: [PATCH] downsampling options --- OptiScaler/Config.cpp | 5 + OptiScaler/Config.h | 1 + OptiScaler/imgui/imgui_common.cpp | 44 +- OptiScaler/imgui/imgui_common.h | 3 +- OptiScaler/output_scaling/OS_Common.h | 118 ++++- OptiScaler/output_scaling/OS_Dx11.cpp | 69 ++- OptiScaler/output_scaling/OS_Dx12.cpp | 67 ++- .../precompile/bcds_bicubic.hlsl | 75 ++++ .../precompile/bcds_bicubic_Shader.cso | Bin 0 -> 5000 bytes .../precompile/bcds_bicubic_Shader.h | 421 +++++++++++++++++ .../precompile/bcds_bicubic_Shader_Dx11.cso | Bin 0 -> 3396 bytes .../precompile/bcds_bicubic_Shader_Dx11.h | 288 ++++++++++++ .../{bcds.hlsl => bcds_catmull.hlsl} | 0 ...CDS_Shader.cso => bcds_catmull_Shader.cso} | Bin .../{BCDS_Shader.h => bcds_catmull_Shader.h} | 2 +- ..._Dx11.cso => bcds_catmull_Shader_Dx11.cso} | Bin ...ader_Dx11.h => bcds_catmull_Shader_Dx11.h} | 2 +- .../precompile/bcds_lanczos.hlsl | 109 +++++ .../precompile/bcds_lanczos_Shader.cso | Bin 0 -> 5008 bytes .../precompile/bcds_lanczos_Shader.h | 422 +++++++++++++++++ .../precompile/bcds_lanczos_Shader_Dx11.cso | Bin 0 -> 2940 bytes .../precompile/bcds_lanczos_Shader_Dx11.h | 250 +++++++++++ .../output_scaling/precompile/bcds_magc.hlsl | 109 +++++ .../precompile/bcds_magc_Shader.cso | Bin 0 -> 5024 bytes .../precompile/bcds_magc_Shader.h | 423 ++++++++++++++++++ .../precompile/bcds_magc_Shader_Dx11.cso | Bin 0 -> 3340 bytes .../precompile/bcds_magc_Shader_Dx11.h | 283 ++++++++++++ nvngx.ini | 5 + 28 files changed, 2671 insertions(+), 25 deletions(-) create mode 100644 OptiScaler/output_scaling/precompile/bcds_bicubic.hlsl create mode 100644 OptiScaler/output_scaling/precompile/bcds_bicubic_Shader.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_bicubic_Shader.h create mode 100644 OptiScaler/output_scaling/precompile/bcds_bicubic_Shader_Dx11.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_bicubic_Shader_Dx11.h rename OptiScaler/output_scaling/precompile/{bcds.hlsl => bcds_catmull.hlsl} (100%) rename OptiScaler/output_scaling/precompile/{BCDS_Shader.cso => bcds_catmull_Shader.cso} (100%) rename OptiScaler/output_scaling/precompile/{BCDS_Shader.h => bcds_catmull_Shader.h} (99%) rename OptiScaler/output_scaling/precompile/{BCDS_Shader_Dx11.cso => bcds_catmull_Shader_Dx11.cso} (100%) rename OptiScaler/output_scaling/precompile/{BCDS_Shader_Dx11.h => bcds_catmull_Shader_Dx11.h} (99%) create mode 100644 OptiScaler/output_scaling/precompile/bcds_lanczos.hlsl create mode 100644 OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.h create mode 100644 OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.h create mode 100644 OptiScaler/output_scaling/precompile/bcds_magc.hlsl create mode 100644 OptiScaler/output_scaling/precompile/bcds_magc_Shader.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_magc_Shader.h create mode 100644 OptiScaler/output_scaling/precompile/bcds_magc_Shader_Dx11.cso create mode 100644 OptiScaler/output_scaling/precompile/bcds_magc_Shader_Dx11.h diff --git a/OptiScaler/Config.cpp b/OptiScaler/Config.cpp index 11d3f47f..a062b40e 100644 --- a/OptiScaler/Config.cpp +++ b/OptiScaler/Config.cpp @@ -365,6 +365,10 @@ bool Config::Reload(std::filesystem::path iniPath) OutputScalingMultiplier = 0.5f; else if (OutputScalingMultiplier.has_value() && OutputScalingMultiplier.value() > 3.0f) OutputScalingMultiplier = 3.0f; + + if (!OutputScalingDownscaler.has_value()) + OutputScalingDownscaler = readInt("OutputScaling", "Downscaler"); + } // Init Flags @@ -742,6 +746,7 @@ bool Config::SaveIni() ini.SetValue("OutputScaling", "Enabled", GetBoolValue(Instance()->OutputScalingEnabled).c_str()); ini.SetValue("OutputScaling", "Multiplier", GetFloatValue(Instance()->OutputScalingMultiplier).c_str()); ini.SetValue("OutputScaling", "UseFsr", GetBoolValue(Instance()->OutputScalingUseFsr).c_str()); + ini.SetValue("OutputScaling", "Downscaler", GetBoolValue(Instance()->OutputScalingDownscaler).c_str()); } // FSR diff --git a/OptiScaler/Config.h b/OptiScaler/Config.h index 3bd06dc7..34c20925 100644 --- a/OptiScaler/Config.h +++ b/OptiScaler/Config.h @@ -127,6 +127,7 @@ public: std::optional OutputScalingEnabled; std::optional OutputScalingMultiplier; std::optional OutputScalingUseFsr; + std::optional OutputScalingDownscaler; // fsr std::optional FsrVerticalFov; diff --git a/OptiScaler/imgui/imgui_common.cpp b/OptiScaler/imgui/imgui_common.cpp index 05dcf4ef..15ba18ec 100644 --- a/OptiScaler/imgui/imgui_common.cpp +++ b/OptiScaler/imgui/imgui_common.cpp @@ -694,7 +694,7 @@ void ImGuiCommon::AddResourceBarrier(std::string name, std::optional* value void ImGuiCommon::AddRenderPreset(std::string name, std::optional* value) { const char* presets[] = { "DEFAULT", "PRESET A", "PRESET B", "PRESET C", "PRESET D", "PRESET E", "PRESET F", "PRESET G" }; - const char* presetsDesc[] = { "Whatever the game uses", + const std::string presetsDesc[] = { "Whatever the game uses", "Intended for Performance/Balanced/Quality modes.\nAn older variant best suited to combat ghosting for elements with missing inputs, such as motion vectors.", "Intended for Ultra Performance mode.\nSimilar to Preset A but for Ultra Performance mode.", "Intended for Performance/Balanced/Quality modes.\nGenerally favors current frame information;\nwell suited for fast-paced game content.", @@ -707,7 +707,7 @@ void ImGuiCommon::AddRenderPreset(std::string name, std::optional* val PopulateCombo(name, value, presets, presetsDesc, 8); } -void ImGuiCommon::PopulateCombo(std::string name, std::optional* value, const char* names[], const char* desc[], int length) { +void ImGuiCommon::PopulateCombo(std::string name, std::optional* value, const char* names[], const std::string desc[], int length) { int selected = value->value_or(0); const char* selectedName = ""; @@ -725,7 +725,9 @@ void ImGuiCommon::PopulateCombo(std::string name, std::optional* value { if (ImGui::Selectable(names[0], !value->has_value())) value->reset(); - ShowTooltip(desc[0]); + + if (desc[0].length() > 0) + ShowTooltip(desc[0].c_str()); for (int n = 1; n < length; n++) { @@ -734,7 +736,9 @@ void ImGuiCommon::PopulateCombo(std::string name, std::optional* value if (n != selected) *value = n; } - ShowTooltip(desc[n]); + + if (desc[n].length() > 0) + ShowTooltip(desc[n].c_str()); } ImGui::EndCombo(); @@ -1555,10 +1559,9 @@ void ImGuiCommon::RenderMenu() _ssRatio = Config::Instance()->OutputScalingMultiplier.value_or(defaultRatio); _ssEnabled = Config::Instance()->OutputScalingEnabled.value_or(false); _ssUseFsr = Config::Instance()->OutputScalingUseFsr.value_or(true); + _ssDownsampler = Config::Instance()->OutputScalingDownscaler.value_or(0); } - - ImGui::BeginDisabled((currentBackend == "xess" || currentBackend == "dlss") && Config::Instance()->CurrentFeature->RenderWidth() > Config::Instance()->CurrentFeature->DisplayWidth()); ImGui::Checkbox("Enable", &_ssEnabled); @@ -1573,15 +1576,29 @@ void ImGuiCommon::RenderMenu() ImGui::SameLine(0.0f, 6.0f); ImGui::BeginDisabled(!_ssEnabled); - ImGui::Checkbox("Use FSR 1", &_ssUseFsr); - ImGui::EndDisabled(); - ShowHelpMarker("Use FSR 1's upscaling pass instead of bicubic"); + { + ImGui::Checkbox("Use FSR 1", &_ssUseFsr); + ShowHelpMarker("Use FSR 1 for scaling"); - ImGui::SameLine(0.0f, 6.0f); + ImGui::SameLine(0.0f, 6.0f); + + ImGui::BeginDisabled(_ssUseFsr || _ssRatio < 1.0f); + { + const char* ds_modes[] = { "Bicubic", "Lanczos", "Catmull-Rom", "MAGC" }; + const std::string ds_modesDesc[] = { "", "", "", "" }; + + ImGui::PushItemWidth(75.0f * Config::Instance()->MenuScale.value()); + PopulateCombo("Downscaler", &Config::Instance()->OutputScalingDownscaler, ds_modes, ds_modesDesc, 4); + ImGui::PopItemWidth(); + } + ImGui::EndDisabled(); + } + ImGui::EndDisabled(); bool applyEnabled = _ssEnabled != Config::Instance()->OutputScalingEnabled.value_or(false) || _ssRatio != Config::Instance()->OutputScalingMultiplier.value_or(defaultRatio) || - _ssUseFsr != Config::Instance()->OutputScalingUseFsr.value_or(true); + _ssUseFsr != Config::Instance()->OutputScalingUseFsr.value_or(true) || + (_ssRatio > 1.0f && _ssDownsampler != Config::Instance()->OutputScalingDownscaler.value_or(0)); ImGui::BeginDisabled(!applyEnabled); if (ImGui::Button("Apply Change")) @@ -1589,6 +1606,7 @@ void ImGuiCommon::RenderMenu() Config::Instance()->OutputScalingEnabled = _ssEnabled; Config::Instance()->OutputScalingMultiplier = _ssRatio; Config::Instance()->OutputScalingUseFsr = _ssUseFsr; + _ssDownsampler = Config::Instance()->OutputScalingDownscaler.value_or(0); if (Config::Instance()->CurrentFeature->Name() == "DLSSD") Config::Instance()->newBackend = "dlssd"; @@ -2081,7 +2099,7 @@ void ImGuiCommon::RenderMenu() ShowHelpMarker("When possible AntiLag 2 is used, this setting let's you force LatencyFlex instead"); const char* lfx_modes[] = { "Conservative", "Aggressive", "Reflex ID" }; - const char* lfx_modesDesc[] = { "The safest but might not reduce latency well", + const std::string lfx_modesDesc[] = { "The safest but might not reduce latency well", "Improves latency but in some cases will lower fps more than expected", "Best when can be used, some games are not compatible (i.e. cyberpunk) and will fallback to aggressive" }; @@ -2089,7 +2107,7 @@ void ImGuiCommon::RenderMenu() PopulateCombo("LatencyFlex mode", &Config::Instance()->FN_LatencyFlexMode, lfx_modes, lfx_modesDesc, 3); const char* rfx_modes[] = { "Follow in-game", "Force Disable", "Force Enable" }; - const char* rfx_modesDesc[] = { "", "", "" }; + const std::string rfx_modesDesc[] = { "", "", "" }; PopulateCombo("Force Reflex", &Config::Instance()->FN_ForceReflex, rfx_modes, rfx_modesDesc, 3); diff --git a/OptiScaler/imgui/imgui_common.h b/OptiScaler/imgui/imgui_common.h index 3942ad89..2b70f754 100644 --- a/OptiScaler/imgui/imgui_common.h +++ b/OptiScaler/imgui/imgui_common.h @@ -45,6 +45,7 @@ private: inline static float _ssRatio = 0.0f; inline static bool _ssEnabled = false; inline static bool _ssUseFsr = false; + inline static uint32_t _ssDownsampler = 0; // ui scale inline static int _selectedScale = 5; @@ -126,7 +127,7 @@ private: static void AddRenderPreset(std::string name, std::optional* value); - static void PopulateCombo(std::string name, std::optional* value, const char* names[], const char* desc[], int length); + static void PopulateCombo(std::string name, std::optional* value, const char* names[], const std::string desc[], int length); public: diff --git a/OptiScaler/output_scaling/OS_Common.h b/OptiScaler/output_scaling/OS_Common.h index 9a9ee1b6..f9799b5f 100644 --- a/OptiScaler/output_scaling/OS_Common.h +++ b/OptiScaler/output_scaling/OS_Common.h @@ -9,8 +9,122 @@ struct alignas(256) Constants int32_t destWidth; int32_t destHeight; }; -inline static std::string downsampleCode = R"( -cbuffer Params : register(b0) { + +// Lanczos with luminance correction +inline static std::string downsampleCodeLanczos = R"( +cbuffer Params : register(b0) +{ + int _SrcWidth; // Source texture width + int _SrcHeight; // Source texture height + int _DstWidth; // Destination texture width + int _DstHeight; // Destination texture height +}; + +// Texture resources. +Texture2D InputTexture : register(t0); // Input texture (source image) +RWTexture2D OutputTexture : register(u0); // Output texture (downsampled image) + +float luminance(float3 color) +{ + return dot(color, float3(0.2126, 0.7152, 0.0722)); +} + +// Lanczos kernel function. +float lanczosKernel(float x, float radius, float pi) +{ + if (x == 0.0) return 1.0; + if (x > radius) return 0.0; + + x *= pi; + return (sin(x) / x) * (sin(x / radius) / (x / radius)); +} + +[numthreads(16, 16, 1)] +void CSMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + // Coordinates of the pixel in the target (downsampled) texture. + uint2 targetCoords = dispatchThreadID.xy; + + // Ensure we are within the target texture bounds. + if (targetCoords.x >= _DstWidth || targetCoords.y >= _DstHeight) + return; + + // Calculate scaling factor and source position. + float2 scale = float2(_SrcWidth, _SrcHeight) / float2(_DstWidth, _DstHeight); + float2 sourcePos = float2(targetCoords) * scale; + + // Lanczos kernel properties. + const float lanczosRadius = 3.0; // Typical radius (adjustable for quality/performance) + const float pi = 3.14159265359; + + // Accumulators for color and weight. + float4 color = 0.0; + float totalWeight = 0.0; + float avgLuminance = 0.0; + + // First pass: Compute average luminance in the 4x4 neighborhood + for (int dy = -1; dy <= 2; dy++) + { + for (int dx = -1; dx <= 2; dx++) + { + int2 sampleCoords = sourcePos + int2(dx, dy); + sampleCoords = clamp(sampleCoords, int2(0, 0), int2(_SrcWidth - 1, _SrcHeight - 1)); + + float4 sampleColor = InputTexture.Load(int3(sampleCoords, 0)); + avgLuminance += luminance(sampleColor.rgb); + } + } + avgLuminance /= 16.0; // Normalize luminance by the 4x4 sample count + + // Loop through the kernel window. + for (int y = -int(lanczosRadius); y <= int(lanczosRadius); y++) + { + for (int x = -int(lanczosRadius); x <= int(lanczosRadius); x++) + { + // Offset in source texture space. + float2 offset = float2(x, y); + float2 samplePos = sourcePos + offset; + + // Ensure we sample within bounds. + samplePos = clamp(samplePos, float2(0, 0), float2(_SrcWidth - 1, _SrcHeight - 1)); + + // Fetch the texel. + float4 sampleColor = InputTexture.Load(int3(samplePos, 0)); + + // Compute the current luminance of the sample + float currentLuminance = luminance(sampleColor.rgb); + + // Scale the color to match the average luminance if it deviates too much + float luminanceDeviation = abs(currentLuminance - avgLuminance); + if (luminanceDeviation > 0.5) // Threshold for clamping + { + float luminanceScale = avgLuminance / max(currentLuminance, 1e-5); // Avoid division by zero + sampleColor.rgb *= luminanceScale; // Scale brightness while preserving hue/saturation + } + + // Calculate Lanczos weight. + float2 dist = abs(samplePos - sourcePos); + float2 lanczosWeight = lanczosKernel(dist.x, lanczosRadius, pi) * + lanczosKernel(dist.y, lanczosRadius, pi); + + // Accumulate weighted color. + color += sampleColor * lanczosWeight.x * lanczosWeight.y; + totalWeight += lanczosWeight.x * lanczosWeight.y; + } + } + + // Normalize the color by the total weight to avoid darkening/brightening. + color /= totalWeight; + + // Write the result to the output texture. + OutputTexture[dispatchThreadID.xy] = color; +} +)"; + +// Catmull-rom with luminance correction +inline static std::string downsampleCodeCatmull = R"( +cbuffer Params : register(b0) +{ int _SrcWidth; // Source texture width int _SrcHeight; // Source texture height int _DstWidth; // Destination texture width diff --git a/OptiScaler/output_scaling/OS_Dx11.cpp b/OptiScaler/output_scaling/OS_Dx11.cpp index a34d7778..9c0b139d 100644 --- a/OptiScaler/output_scaling/OS_Dx11.cpp +++ b/OptiScaler/output_scaling/OS_Dx11.cpp @@ -3,7 +3,11 @@ #define A_CPU // FSR compute shader is from : https://github.com/fholger/vrperfkit/ -#include "precompile/BCDS_Shader_Dx11.h" +#include "precompile/BCDS_lanczos_Shader_Dx11.h" +#include "precompile/BCDS_catmull_Shader_Dx11.h" +#include "precompile/BCDS_bicubic_Shader_Dx11.h" +#include "precompile/BCDS_magc_Shader_Dx11.h" + #include "precompile/BCUS_Shader_Dx11.h" #include "../fsr1/ffx_fsr1.h" @@ -246,10 +250,37 @@ OS_Dx11::OS_Dx11(std::string InName, ID3D11Device* InDevice, bool InUpsample) : } else { + if (_upsample) + { hr = _device->CreateComputeShader(reinterpret_cast(BCUS_cso), sizeof(BCUS_cso), nullptr, &_computeShader); + } else - hr = _device->CreateComputeShader(reinterpret_cast(BCDS_cso), sizeof(BCDS_cso), nullptr, &_computeShader); + { + switch (Config::Instance()->OutputScalingDownscaler.value_or(0)) + { + case 0: + hr = _device->CreateComputeShader(reinterpret_cast(bcds_bicubic_cso), sizeof(bcds_bicubic_cso), nullptr, &_computeShader); + break; + + case 1: + hr = _device->CreateComputeShader(reinterpret_cast(bcds_lanczos_cso), sizeof(bcds_lanczos_cso), nullptr, &_computeShader); + break; + + case 2: + hr = _device->CreateComputeShader(reinterpret_cast(bcds_catmull_cso), sizeof(bcds_catmull_cso), nullptr, &_computeShader); + break; + + case 3: + hr = _device->CreateComputeShader(reinterpret_cast(bcds_magc_cso), sizeof(bcds_magc_cso), nullptr, &_computeShader); + break; + + default: + hr = _device->CreateComputeShader(reinterpret_cast(bcds_bicubic_cso), sizeof(bcds_bicubic_cso), nullptr, &_computeShader); + break; + + } + } } if (FAILED(hr)) @@ -260,8 +291,40 @@ OS_Dx11::OS_Dx11(std::string InName, ID3D11Device* InDevice, bool InUpsample) : } else { + ID3DBlob* shaderBlob = nullptr; + // Compile shader blobs - ID3DBlob* shaderBlob = OS_CompileShader(_upsample ? upsampleCode.c_str() : downsampleCode.c_str(), "CSMain", "cs_5_0"); + if (_upsample) + { + shaderBlob = OS_CompileShader( upsampleCode.c_str(), "CSMain", "cs_5_0"); + } + else + { + switch (Config::Instance()->OutputScalingDownscaler.value_or(0)) + { + case 0: + shaderBlob = OS_CompileShader(downsampleCodeBC.c_str(), "CSMain", "cs_5_0"); + break; + + case 1: + shaderBlob = OS_CompileShader(downsampleCodeLanczos.c_str(), "CSMain", "cs_5_0"); + break; + + case 2: + shaderBlob = OS_CompileShader(downsampleCodeCatmull.c_str(), "CSMain", "cs_5_0"); + break; + + case 3: + shaderBlob = OS_CompileShader(downsampleCodeMAGIC.c_str(), "CSMain", "cs_5_0"); + break; + + default: + shaderBlob = OS_CompileShader(downsampleCodeBC.c_str(), "CSMain", "cs_5_0"); + break; + + } + } + if (shaderBlob == nullptr) { LOG_ERROR("[{0}] CompileShader error!", _name); diff --git a/OptiScaler/output_scaling/OS_Dx12.cpp b/OptiScaler/output_scaling/OS_Dx12.cpp index a81e105a..b6b015b8 100644 --- a/OptiScaler/output_scaling/OS_Dx12.cpp +++ b/OptiScaler/output_scaling/OS_Dx12.cpp @@ -3,7 +3,11 @@ #define A_CPU // FSR compute shader is from : https://github.com/fholger/vrperfkit/ -#include "precompile/BCDS_Shader.h" +#include "precompile/BCDS_lanczos_Shader.h" +#include "precompile/BCDS_catmull_Shader.h" +#include "precompile/BCDS_bicubic_Shader.h" +#include "precompile/BCDS_magc_Shader.h" + #include "precompile/BCUS_Shader.h" #include "../fsr1/ffx_fsr1.h" @@ -397,10 +401,36 @@ OS_Dx12::OS_Dx12(std::string InName, ID3D12Device* InDevice, bool InUpsample) : } else { - if (_upsample) + if (_upsample) + { computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(BCUS_cso), sizeof(BCUS_cso)); + } else - computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(BCDS_cso), sizeof(BCDS_cso)); + { + switch (Config::Instance()->OutputScalingDownscaler.value_or(0)) + { + case 0: + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(bcds_bicubic_cso), sizeof(bcds_bicubic_cso)); + break; + + case 1: + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(bcds_lanczos_cso), sizeof(bcds_lanczos_cso)); + break; + + case 2: + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(bcds_catmull_cso), sizeof(bcds_catmull_cso)); + break; + + case 3: + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(bcds_magc_cso), sizeof(bcds_magc_cso)); + break; + + default: + computePsoDesc.CS = CD3DX12_SHADER_BYTECODE(reinterpret_cast(bcds_bicubic_cso), sizeof(bcds_bicubic_cso)); + break; + + } + } } auto hr = InDevice->CreateComputePipelineState(&computePsoDesc, __uuidof(ID3D12PipelineState*), (void**)&_pipelineState); @@ -416,7 +446,36 @@ OS_Dx12::OS_Dx12(std::string InName, ID3D12Device* InDevice, bool InUpsample) : // Compile shader blobs ID3DBlob* _recEncodeShader = nullptr; - _recEncodeShader = OS_CompileShader(_upsample ? upsampleCode.c_str() : downsampleCode.c_str(), "CSMain", "cs_5_0"); + if (_upsample) + { + _recEncodeShader = OS_CompileShader(upsampleCode.c_str(), "CSMain", "cs_5_0"); + } + else + { + switch (Config::Instance()->OutputScalingDownscaler.value_or(0)) + { + case 0: + _recEncodeShader = OS_CompileShader(downsampleCodeBC.c_str(), "CSMain", "cs_5_0"); + break; + + case 1: + _recEncodeShader = OS_CompileShader(downsampleCodeLanczos.c_str(), "CSMain", "cs_5_0"); + break; + + case 2: + _recEncodeShader = OS_CompileShader(downsampleCodeCatmull.c_str(), "CSMain", "cs_5_0"); + break; + + case 3: + _recEncodeShader = OS_CompileShader(downsampleCodeMAGIC.c_str(), "CSMain", "cs_5_0"); + break; + + default: + _recEncodeShader = OS_CompileShader(downsampleCodeBC.c_str(), "CSMain", "cs_5_0"); + break; + + } + } if (_recEncodeShader == nullptr) { diff --git a/OptiScaler/output_scaling/precompile/bcds_bicubic.hlsl b/OptiScaler/output_scaling/precompile/bcds_bicubic.hlsl new file mode 100644 index 00000000..97cc7b0d --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_bicubic.hlsl @@ -0,0 +1,75 @@ +cbuffer Params : register(b0) +{ + int _SrcWidth; + int _SrcHeight; + int _DstWidth; + int _DstHeight; +}; + +Texture2D InputTexture : register(t0); +RWTexture2D OutputTexture : register(u0); + +float bicubic_weight(float x) +{ + float a = -0.75f; + float absX = abs(x); + if (absX <= 1.0f) + return (a + 2.0f) * absX * absX * absX - (a + 3.0f) * absX * absX + 1.0f; + else if (absX < 2.0f) + return a * absX * absX * absX - 5.0f * a * absX * absX + 8.0f * a * absX - 4.0f * a; + else + return 0.0f; +} + +// Luminance computation using perceptual weights +float luminance(float3 color) +{ + return dot(color, float3(0.2126, 0.7152, 0.0722)); +} + +[numthreads(16, 16, 1)] +void CSMain(uint3 DTid : SV_DispatchThreadID) +{ + if (DTid.x >= _DstWidth || DTid.y >= _DstHeight) + return; + + float2 uv = float2(DTid.x / (_DstWidth - 1.0f), DTid.y / (_DstHeight - 1.0f)); + float2 pixel = uv * float2(_SrcWidth, _SrcHeight); + float2 texel = floor(pixel); + float2 t = pixel - texel; + t = t * t * (3.0f - 2.0f * t); + float4 result = float4(0.0f, 0.0f, 0.0f, 0.0f); + + float avgLuminance = 0.0; + for (int y = -1; y <= 2; y++) + { + for (int x = -1; x <= 2; x++) + { + avgLuminance += luminance(InputTexture.Load(int3(texel.x + x, texel.y + y, 0)).rgb); + } + } + avgLuminance /= 16.0; // Normalize luminance by the 4x4 sample count + + for (int y = -1; y <= 2; y++) + { + for (int x = -1; x <= 2; x++) + { + float4 color = InputTexture.Load(int3(texel.x + x, texel.y + y, 0)); + + // Compute the current luminance of the sample + float currentLuminance = luminance(color.rgb); + + // Scale the color to match the average luminance if it deviates too much + float luminanceDeviation = abs(currentLuminance - avgLuminance); + if (luminanceDeviation > 0.5) // Threshold for clamping + { + float luminanceScale = avgLuminance / max(currentLuminance, 1e-5); // Avoid division by zero + color.rgb *= luminanceScale; // Scale brightness while preserving hue/saturation + } + + float weight = bicubic_weight(x - t.x) * bicubic_weight(y - t.y); + result += color * weight; + } + } + OutputTexture[DTid.xy] = result; +} \ No newline at end of file diff --git a/OptiScaler/output_scaling/precompile/bcds_bicubic_Shader.cso b/OptiScaler/output_scaling/precompile/bcds_bicubic_Shader.cso new file mode 100644 index 0000000000000000000000000000000000000000..30609d41c88544a1548be716757cefebbd6729a4 GIT binary patch literal 5000 zcmeHKeN-FQm7mcJGb1#TMo4xBOTft36vsFogu;ixWF%qmhiF6~U#D~<0j6>TL>QO# z2X*xYB92_kHcm+FB*Mh5lXz2M``E_GdWEFgl;A{8vU}_eWxXt(g z4#pB7Mj*97nt+gC@elz)XMt3guVcY*udS=D$h|w~$4CEYZmNEQ?FG2@p2r_5UxAi% zA4CD27ydlFAV6p!0wDJ{@tq03et)}bhuseX{Vtw3tD(BmvZ*CuQC*{}=?0fJLrKsz zuwmI#>x}%y{26Qj*BgT4Y7&C30!-v&5^+G9Al#9;S2v8V!zfMBKG;nzO(Ig$(HH9M z^csPFpGY5}G>Srk-jJ-R>t5?qFoyE(BT%YFA6qN&$uc7*U6sQ->AJBC%`L~OzyhVHvy(u+%04pI#GG% z8*b2DclY@eDMqhX)*~c z*U()SvJEAc{f2z$5sOs)TXmEaIh;qbe;fo}WSFZ|dxzNRWg?ahv%of6u^>Y8E3Tvc zUGKjh@c24f`ga}Z?TDS0<&t4j_qWa1i7CQa$GS8my%B-Kggdud=|zg&;gV68GO90{ zKvsX^D(P{le1eQCh9WPr`aM@k+))$=7rT+w0ho?DGVG3wX-E1g!>VAoh?=eO|3uWNWOF%)%6`O;eEoM)?)w9it0A2h;lcYH+*$#S0x}C*0`|&mg zZ}v%A?`dE-S7cmko(4oQ+e8RVnTzZ(+PC{%ELwH?zl0{oKF)Uoj_b!Yf2t?m(71yGq_AwZhYsn-N(Jn>+L=2 zaNFMH2Y0-^U%C9?!4&HO;5$7#G2$E>8=nqMgAh|kiDx1FI{+UUn~u%;$3GgIo;r$d ziFSfmGyn3z?stqWE$ibvEhTED3XFM#T@{&BH7elM-G)MU*sHhW+qU9uy{+UFB>fzG zY3-6cQlB0gO8cNs)yO6#%v{P*Wc9FNHF#u3w|ckO@ErucZLP;tnkx!1F;*OBv!xa1cTl3xWSGb~a!44$k$ z)o7w0v#3VYs)!?P#De{Y&rmdMDC$l0XTya(hQe;7xF@_4Yt%lBuxgB*Cs$f z!H0an>iJEN82mUpeSnvaw=jP$$d9FSI-rxJVIsovy zT>U0k`sMkeZ>01T(Tn|gXY=U-^%~E ztsq=a-t-b6P+`1ETtq%l98lp?Rj6iiU!~bobXElKyPPrQJODzcFqbbl4%LH|71H4m=+UOmbX&K%myTfTP3az_G;7nBE2|8n_r_2}R~ zox5334*mB`?asssLwmtFGBF|KH2VhN2i|ln@(y+D1a^jQXpUAs8^9XaIv>Ok*vrbT z3zPv}s+XoA!UPfm$hh-=QUmmLaB(3Y|=+MP3duhK=Y;#!pg^z;%MRGRR;QO%K0fQr`-h%MZ9rbMr zcgpk~IYg}9`L&F1xR}y>baucco@g85PNHG1QELH$BK`wB~BVj_?(_J5qqNj-;uhe~co;{%ln{v?^07%WA5!#UBR zl_<3$Dp(N>S@n=NivX!$ymSso)6f>lX_kO9Zs{JRQ-T*S_@(!`o((?~A1XrWm2tt! z_@BDolAH&w%X;)VylW_!#<646oPZwHPzG~L5c}l-NC2x1XlR>B<<=jnqu{?#jigtXz+(v z$tC(2>ow$I50clTfuGh7g4QmkJ!p&Wd4jR zE$nDyl8?!}bRnoIU1ZVb X%kouw_X{JDWSKi(W>!^ zhHER2!u&;Ja;(1}-cgOB#z~E5HDvDTre?YGF%D?`TZ90g3hjQ-fDeYff6~`}?FBQv6m4(Gxadi3WO7&fB`ukq!cNfdAzD_O>>*c0%dHll6 zL_u#wH+MtDd#BU2%qpeQXGKgr%9*1|aV1oIdfK_0oF6{n<(%h~(13DU(n^f4WREsO zsmQnM7>GAklHS&*MR5b^&2{ud*|E45;`)p`&}#d0a&=haihQTOo_DT&Tl&P=`mh+i z`lWC$`e_#$+jQeIy>%=^Hb745wRIhcp5%>V+?rc zVbhX_Z;jy^N%-L6&7cP^?Ae3M^h_>xhw;#ZOdnk2fj{G&cJ7mVdLX0Ihh0rFdc34J zfKKWCV6VAgcBL%nWVv(qf1Eux`{dy8mk&N4k~-9=Ng>8z1?zFiELX!y&fL!tEz|9}~ z?ia3+=r6?^woZo13!n_=%C!GO1ObtERhTz0qz^wKKc3;!#h-h;PnmZ(|3K zx3V35&^xV>M=r?0m%g8kgm1lw9`DEE@_tOu;z-5Uu3Z~=km;wr4Q6!G-Uc7M{dyan zEZ^PR)V@bPIwV)@#`_GlUmqeSxp0T37i4Z&GXFlY)&Dl1gY^w7dbfXmZjj$7Y~hg? z@8A5=>%YhNyh(K0yFyOfTTMK$BO}fi9bx5r1>f+;xDEXHhpdi!^_Stt*7}PWDL>s? zf9;{;u~~m1H@sP{!z20&J^G6^%QZcszmSW34cU_$YrLaIe?^(U6LO08p$Mo5v6Lq+S+6TE{oM{^DY0q;{U)>Tjpb7&wsV@)cL6!+E+B}|0l6};~8Jz Vi{C!&b`$cH9@7E;tpAt5@DGJdAJqT= literal 0 HcmV?d00001 diff --git a/OptiScaler/output_scaling/precompile/bcds_bicubic_Shader_Dx11.h b/OptiScaler/output_scaling/precompile/bcds_bicubic_Shader_Dx11.h new file mode 100644 index 00000000..e8dece2f --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_bicubic_Shader_Dx11.h @@ -0,0 +1,288 @@ +#pragma once + +inline static const unsigned char bcds_bicubic_cso[] = { + 0x44, 0x58, 0x42, 0x43, 0x64, 0xda, 0xe7, 0x9f, 0x36, 0x1e, 0x63, 0x39, + 0x02, 0x61, 0x29, 0x69, 0x2d, 0xfe, 0x5e, 0x7a, 0x01, 0x00, 0x00, 0x00, + 0x44, 0x0d, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x30, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, + 0xa8, 0x0c, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xf4, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x53, 0x43, 0x00, 0x01, 0x00, 0x00, + 0xcc, 0x01, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xb7, 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, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x00, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0xab, 0xab, + 0xb7, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xc1, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x72, 0x63, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x00, 0x69, 0x6e, 0x74, 0x00, 0xab, 0xab, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x00, 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, 0x82, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x72, 0x63, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x5f, 0x44, 0x73, 0x74, 0x57, + 0x69, 0x64, 0x74, 0x68, 0x00, 0x5f, 0x44, 0x73, 0x74, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, + 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4e, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x4f, 0x53, 0x47, 0x4e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x50, 0x0a, 0x00, 0x00, + 0x50, 0x00, 0x05, 0x00, 0x94, 0x02, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, + 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x04, + 0x00, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x08, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, + 0xe6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x56, 0x00, 0x00, 0x04, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x02, 0x00, 0x2b, 0x00, 0x00, 0x06, 0xf2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xe6, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xc2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0xbf, 0x00, 0x00, 0x80, 0xbf, 0x0e, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x07, 0xc2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xa6, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xe6, 0x0a, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x32, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x10, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, + 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, + 0xc2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x03, + 0x2a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x05, + 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x05, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x89, 0xc2, 0x00, 0x00, 0x80, + 0x43, 0x55, 0x15, 0x00, 0x72, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0xd0, 0xb3, 0x59, 0x3e, 0x59, 0x17, 0x37, 0x3f, + 0x98, 0xdd, 0x93, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, + 0x42, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, + 0x38, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3d, 0x36, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x04, 0x03, 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x08, 0x82, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x1a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, + 0x52, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0d, 0x32, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0xa0, 0x3f, 0x00, 0x00, 0x40, 0xbf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x31, 0x00, 0x00, 0x08, + 0x42, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, + 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x32, 0x00, 0x00, 0x0a, 0x22, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, + 0x1a, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, + 0x01, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0xf2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x04, 0x03, 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x89, + 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00, 0xf2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xd0, 0xb3, 0x59, 0x3e, + 0x59, 0x17, 0x37, 0x3f, 0x98, 0xdd, 0x93, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, 0x0a, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, 0x12, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xac, 0xc5, 0x27, 0x37, 0x0e, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0xe2, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x06, 0x09, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x96, 0x07, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x08, 0x82, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, + 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x08, 0x22, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, + 0x52, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xc0, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0d, 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0xa0, 0x3f, 0x00, 0x00, 0x40, 0xbf, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x31, 0x00, 0x00, 0x08, + 0x42, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, + 0x81, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x40, 0x32, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, + 0x1a, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, + 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0xf2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0xa4, 0x00, 0x00, 0x06, + 0xf2, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x02, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 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, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00 + +}; diff --git a/OptiScaler/output_scaling/precompile/bcds.hlsl b/OptiScaler/output_scaling/precompile/bcds_catmull.hlsl similarity index 100% rename from OptiScaler/output_scaling/precompile/bcds.hlsl rename to OptiScaler/output_scaling/precompile/bcds_catmull.hlsl diff --git a/OptiScaler/output_scaling/precompile/BCDS_Shader.cso b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader.cso similarity index 100% rename from OptiScaler/output_scaling/precompile/BCDS_Shader.cso rename to OptiScaler/output_scaling/precompile/bcds_catmull_Shader.cso diff --git a/OptiScaler/output_scaling/precompile/BCDS_Shader.h b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader.h similarity index 99% rename from OptiScaler/output_scaling/precompile/BCDS_Shader.h rename to OptiScaler/output_scaling/precompile/bcds_catmull_Shader.h index 1b443a37..4e245336 100644 --- a/OptiScaler/output_scaling/precompile/BCDS_Shader.h +++ b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader.h @@ -1,6 +1,6 @@ #pragma once -inline static const unsigned char BCDS_cso[] = { +inline static const unsigned char bcds_catmull_cso[] = { 0x44, 0x58, 0x42, 0x43, 0x66, 0x0c, 0xe1, 0x69, 0x79, 0x1b, 0x27, 0x54, 0x88, 0x30, 0xf4, 0xc5, 0xd6, 0xd3, 0xe3, 0x66, 0x01, 0x00, 0x00, 0x00, 0xa8, 0x13, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, diff --git a/OptiScaler/output_scaling/precompile/BCDS_Shader_Dx11.cso b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader_Dx11.cso similarity index 100% rename from OptiScaler/output_scaling/precompile/BCDS_Shader_Dx11.cso rename to OptiScaler/output_scaling/precompile/bcds_catmull_Shader_Dx11.cso diff --git a/OptiScaler/output_scaling/precompile/BCDS_Shader_Dx11.h b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader_Dx11.h similarity index 99% rename from OptiScaler/output_scaling/precompile/BCDS_Shader_Dx11.h rename to OptiScaler/output_scaling/precompile/bcds_catmull_Shader_Dx11.h index d0b9c104..62f34702 100644 --- a/OptiScaler/output_scaling/precompile/BCDS_Shader_Dx11.h +++ b/OptiScaler/output_scaling/precompile/bcds_catmull_Shader_Dx11.h @@ -1,6 +1,6 @@ #pragma once -inline static const unsigned char BCDS_cso[] = { +inline static const unsigned char bcds_catmull_cso[] = { 0x44, 0x58, 0x42, 0x43, 0x05, 0xd2, 0xd5, 0xd7, 0x91, 0x91, 0x9d, 0x28, 0x44, 0x31, 0x03, 0x2e, 0xcf, 0xaa, 0xd1, 0x26, 0x01, 0x00, 0x00, 0x00, 0xac, 0x0c, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, diff --git a/OptiScaler/output_scaling/precompile/bcds_lanczos.hlsl b/OptiScaler/output_scaling/precompile/bcds_lanczos.hlsl new file mode 100644 index 00000000..e5e44b35 --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_lanczos.hlsl @@ -0,0 +1,109 @@ +cbuffer Params : register(b0) +{ + int _SrcWidth; // Source texture width + int _SrcHeight; // Source texture height + int _DstWidth; // Destination texture width + int _DstHeight; // Destination texture height +}; + +// Texture resources. +Texture2D InputTexture : register(t0); // Input texture (source image) +RWTexture2D OutputTexture : register(u0); // Output texture (downsampled image) + +float luminance(float3 color) +{ + return dot(color, float3(0.2126, 0.7152, 0.0722)); +} + +// Lanczos kernel function. +float lanczosKernel(float x, float radius, float pi) +{ + if (x == 0.0) + return 1.0; + if (x > radius) + return 0.0; + + x *= pi; + return (sin(x) / x) * (sin(x / radius) / (x / radius)); +} + +[numthreads(16, 16, 1)] +void CSMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + // Coordinates of the pixel in the target (downsampled) texture. + uint2 targetCoords = dispatchThreadID.xy; + + // Ensure we are within the target texture bounds. + if (targetCoords.x >= _DstWidth || targetCoords.y >= _DstHeight) + return; + + // Calculate scaling factor and source position. + float2 scale = float2(_SrcWidth, _SrcHeight) / float2(_DstWidth, _DstHeight); + float2 sourcePos = float2(targetCoords) * scale; + + // Lanczos kernel properties. + const float lanczosRadius = 3.0; // Typical radius (adjustable for quality/performance) + const float pi = 3.14159265359; + + // Accumulators for color and weight. + float4 color = 0.0; + float totalWeight = 0.0; + float avgLuminance = 0.0; + + // First pass: Compute average luminance in the 4x4 neighborhood + for (int dy = -1; dy <= 2; dy++) + { + for (int dx = -1; dx <= 2; dx++) + { + int2 sampleCoords = sourcePos + int2(dx, dy); + sampleCoords = clamp(sampleCoords, int2(0, 0), int2(_SrcWidth - 1, _SrcHeight - 1)); + + float4 sampleColor = InputTexture.Load(int3(sampleCoords, 0)); + avgLuminance += luminance(sampleColor.rgb); + } + } + avgLuminance /= 16.0; // Normalize luminance by the 4x4 sample count + + // Loop through the kernel window. + for (int y = -int(lanczosRadius); y <= int(lanczosRadius); y++) + { + for (int x = -int(lanczosRadius); x <= int(lanczosRadius); x++) + { + // Offset in source texture space. + float2 offset = float2(x, y); + float2 samplePos = sourcePos + offset; + + // Ensure we sample within bounds. + samplePos = clamp(samplePos, float2(0, 0), float2(_SrcWidth - 1, _SrcHeight - 1)); + + // Fetch the texel. + float4 sampleColor = InputTexture.Load(int3(samplePos, 0)); + + // Compute the current luminance of the sample + float currentLuminance = luminance(sampleColor.rgb); + + // Scale the color to match the average luminance if it deviates too much + float luminanceDeviation = abs(currentLuminance - avgLuminance); + if (luminanceDeviation > 0.5) // Threshold for clamping + { + float luminanceScale = avgLuminance / max(currentLuminance, 1e-5); // Avoid division by zero + sampleColor.rgb *= luminanceScale; // Scale brightness while preserving hue/saturation + } + + // Calculate Lanczos weight. + float2 dist = abs(samplePos - sourcePos); + float2 lanczosWeight = lanczosKernel(dist.x, lanczosRadius, pi) * + lanczosKernel(dist.y, lanczosRadius, pi); + + // Accumulate weighted color. + color += sampleColor * lanczosWeight.x * lanczosWeight.y; + totalWeight += lanczosWeight.x * lanczosWeight.y; + } + } + + // Normalize the color by the total weight to avoid darkening/brightening. + color /= totalWeight; + + // Write the result to the output texture. + OutputTexture[dispatchThreadID.xy] = color; +} \ No newline at end of file diff --git a/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.cso b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.cso new file mode 100644 index 0000000000000000000000000000000000000000..880f11504bf0346d62f6978a60c1e6211fc16a86 GIT binary patch literal 5008 zcmeHKe^e7!zMsiVW(Jsq2|*o9fI+H7rFDoDp@5qoNTbFYh23>qx1FFOt-uDMRMB=b zNl0QFYOJ`X(AN#(THkwUv3h#cx;^LE_eUB>7h89`6huR!pUk|oDyYEgw*WI&c z&v}2m^Y)y#_ssX+@ArGZ_j~X6J9qBqPT3}{F89RNu4US{e%;ve*%G|yk8i;c1bO5T zgoCyOkO9zUK(&BK(0PG?pbv%?-#0{)&pzE)kuI@5FYaf^ydP33VAGzW>H z--8LuHmx=Y6ANqb0KHb{znMis&=}AqS(&&WkR}M{vkzzn(A5~FDtaBZlMBT}S_b-R zm4#j<(!QRg4O6PrLV{kKsH$@5J*kYY-1QqMO{E>zOFgpeuu-#tcaPa_y@KYIV;ew# z!nzdhsE`g^Ejli7!~_;$;A>dbw7|k1Xf?1C;+0!DEn^_!A?{-!=oz3>EpR0;TU$|i z_E9^izOZ+BQd10WcalA9pu7P>od6|H5PlySVyO)-6OE~=q5Aoc{xX=Mz4KG;Q~N$# zRtSecL#)()12Zml2D>0c)DLs}oVc#Vn;v0$LFg4n92S_Um7v1%KPRnr)%p<0hw z8N|vER^tm-&3EPBQm*78N0b^PS#5M^y6YH@=GE2D+Zs5h z+3VbGMxM&S_xhYI9_LOEvN4M6$#FLLoG*Itl`P)8%W3xE1rYLh3}ItPX~fp7$9H+1 z&-$EuEzX_l0DF*jBgOVm$&gJE(H2FK(yO+TcAL^8${f)ZxslQfwvrfM)Eg?cBc;7C z9pN)Ad?pk4o_KQ~*~g~`O&Jpb$=0#CHC@UWpYeN5#-K*3=aZ+plzn{0O-;tMUpX?C z9^^AdAac^5?Dr=dqX%}CCze6kSyi-y*F*BuoqlH%=Pamk?yf-qFL}o(t&2!oKn*3g zu=q|N-pJr}9%;ipX4gHYfx`uZ2=?UzX3c86g~OX7*aU?)&scI&;9B z0zb1J;u_ss@l6Ew0w|6Wl!|{pf$Vc!eI@7XRA zad8%cELrQtsCrg_bQvUZ-?yVgLEZnjw(?Liuu^4sQ`2Myk2_(}6Md*|{u&PT(XaR( zN<2yqc2S8(*uf+D$Sa$Cdc6WZ4kvDhYTksIotR}X4T5%qJ-!e4n2#7dJ#^`a$pmEw=lGIQD0xKVW_-k(Ka1rps;OLHdkTiM;HoiJ#{W2=&z-vb}wTO zlrQ>Fa`Ls;{)OCs^2w96RyJR54}8i{mmGHETq{inKc!0K_Pppw$+h9Ywc!ni#)hwb zcxWAUrZ%K4OVN-+`Rgt_EFDZc{{*tc@Muq6y_E&g2G0{!ev3r&9&cG9@iHDw|M-qI z^;1jQ+|oKLtCridIvDa}RP#vzqyL>Olg>A(Zvg}HpL4$=+v*Xko5wLh>mPr$=C#|i z!wd@QC|R<6+V4w1mONY5*rea~-1eF#xt+gmVQQkk3E96g4X$yFuu-e(KmSDjm|+2ACv zY?D6X?lGMFvaQEmx5m<*6>2=Nv~$nD9#kyt>`bXS1jbI@i4IyvM{iCBCxMHJW5f;! ze*x$RM<>Vc_-=kYIyrF+ZHlx4UsES8x1BW9*RP2QFcse`8$i39uqeZ0%IZ|O)TJx5 zhum5VzIzwm=xrb;pyaP8={FYXa#EWS45VM~QdYC#xS35cgp>~GO2IKPw9DOO#`h5T zZoSiN##_vYaP%};v$|D_Plk3^!FJjV|QM#N8r{By{j${dkM>V^z_=2rCqANOs zlz_9wjua2YQkyw^PYu4J#<>&J7N^SlhIP{EC^pVWe;38RrKETK(lJl+*T&>;SQ|e8XO60c ziGrqdfdSA4H82qLFlaH(+>^kx$<(1+#rrcE31xb@;l?6Ja`@|#mo52f``v*$MX+G= z2md*(RnHO24oTT|J4|@@kG{81FAP~$hO)A(2$^KUFPraP{v!Eu)AtwaZm1sXRy2n0RDqm?gjdLSl$i#{$8>CSrFIX#PT=)f#v@@ zSU#{=*i(O3crGkxru?7bc@miaui-iKN*A%_h&qu!BZFoT+_zJ>kP7&%0qy@Bzr74O zgqheJH-IKbb;$Bi7|kLVi2!E5!H`!l-dyldI7o#f)D;KR!MNeaG?Al{q^vwNFaMML zQibSws}Z|~nk)s3{UQ}M!wOL?BKvU~tD&IzGZ%gU&DYt@|K6*aydb&Q2VehbYulxh zmln4547Js-p(+73omzUZbM2nS&J=2$fNH@J0Bpz5@^n?n;i5C_yQ*`?R=lfvZ?R^h zgS@ipWbN$}PuBO;*01qg17jCAb|3u6*0L6WVrR-;;k605_y<1y|G_5{18@a^sT{4$ z74FdrK>0(^RrPc2n?F6Y;Y+N2W8NH-`rIK+dg{hB%(F3L6)Q4|>~5KbAztU$^4{;e z4b}k78(z)*Lz|%d{4*K`KV`S$LJ$Zy`rf(FCW}tJG;x#GoIHH{hc=miW%1$9;=i@o zSOR3_dQSxUj%wz+0xpfn!qBy~{-Wo7*cP_R12F{lw4y08zXwip(=!X)W@`n?<6JRcoY2orsL@ptwW|qY_B<(ey4Y~p_2#Y=&!TXoa zb{t50iAl}Ia1cE=Y0V_UE)4=~^3O-{8YW3=PJA0YYzGB(CurFYmdM7EfT{6IZ4Rl8 zVP*=SyD65pbe@_WrQG1!tV%88u0Lww&SvF^S?@O1;ZH2}T*(dO8TsS31M*?DI4CWD zvJ9EyDyEBMl1e7VjhE#c`GI)nMNVG6zU(wQ0L+w+z@U3*I3@B|1+uE)4B7-&Ihks! z!rzasuw0pmj*CT;jzpyKG!$B*qHwv~wtZ+jLFBZKt<-_mJ>{HDdd5&xo6X_Re!7jU`#uu=+yDa@G<*BePc1fjv zl2ry`Hi28uNq#gi8^MB8yY~4-{7USuZErbALTG?llJo|VOHFQpvwr9gWyqeJ z44vW*>=*NUb0^2QXdlj0Jbst%!tUe+Q=?n#i~apXg=N3&7?ioz0I#f0`~_?sb1;wi zxnE^zMUAazp@3P}JC|cWV$%7A;+JysCbxX3$y`f)=cWt6XB9XzuXH$N$$^v|8dB?* MpGM{29x9ao1_1z-qW}N^ literal 0 HcmV?d00001 diff --git a/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.h b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.h new file mode 100644 index 00000000..9041aa63 --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader.h @@ -0,0 +1,422 @@ +#pragma once + +inline static const unsigned char bcds_lanczos_cso[] = { + 0x44, 0x58, 0x42, 0x43, 0x2c, 0xad, 0x64, 0xa1, 0x2f, 0x42, 0x9e, 0x9f, + 0x73, 0x7a, 0xdf, 0x2a, 0x07, 0x39, 0xff, 0x9e, 0x01, 0x00, 0x00, 0x00, + 0x90, 0x13, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x0c, 0x01, 0x00, 0x00, 0xbc, 0x08, 0x00, 0x00, 0xd8, 0x08, 0x00, 0x00, + 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x50, 0x53, 0x56, 0x30, 0x98, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x43, 0x53, 0x4d, 0x61, 0x69, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xa8, 0x07, 0x00, 0x00, + 0x60, 0x00, 0x05, 0x00, 0xea, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe1, 0x01, 0x00, 0x00, + 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, + 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, + 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, + 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, + 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, + 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, + 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, + 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x98, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, + 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, 0x51, 0x88, 0x61, 0x18, + 0x06, 0x32, 0x66, 0x00, 0x6e, 0x1a, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, + 0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, 0x15, 0x08, 0x82, 0x20, + 0xc3, 0x1c, 0x01, 0x42, 0xca, 0x3d, 0xc3, 0xe5, 0x4f, 0xd8, 0x43, 0x48, + 0x7e, 0x08, 0x34, 0xc3, 0x42, 0xa0, 0x60, 0x29, 0x4a, 0x32, 0x30, 0xc3, + 0x30, 0x0c, 0xc3, 0x30, 0x50, 0x53, 0x08, 0x64, 0x40, 0x10, 0x7a, 0xca, + 0x80, 0x0c, 0x08, 0x45, 0x65, 0x01, 0x06, 0x66, 0x18, 0x06, 0x04, 0x41, + 0x10, 0x85, 0xa6, 0x82, 0x20, 0x03, 0x82, 0x20, 0x08, 0x82, 0x50, 0x75, + 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, + 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, 0x0a, 0x71, 0x0d, 0xcc, + 0x40, 0xd8, 0x1c, 0x41, 0x50, 0x0c, 0x66, 0x50, 0x86, 0x41, 0xa3, 0x6d, + 0x20, 0x60, 0x18, 0x81, 0x40, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87, 0x70, + 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, + 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, 0x71, + 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, + 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x3d, + 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, 0x7c, + 0x80, 0x87, 0x72, 0x40, 0xc1, 0x30, 0x93, 0x18, 0x8c, 0x03, 0x3b, 0x84, + 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, 0xe0, 0x03, 0x3d, 0xd4, + 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x02, 0x1f, 0xd8, 0x43, 0x39, 0x8c, + 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, + 0x03, 0x3d, 0xb0, 0x01, 0x18, 0xd0, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0x20, + 0xc1, 0xfb, 0x08, 0x9c, 0x89, 0x0c, 0xc6, 0x81, 0x1d, 0xc2, 0x61, 0x1e, + 0xe6, 0xc1, 0x0d, 0x64, 0xe1, 0x16, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, + 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, + 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, + 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, + 0x50, 0xe0, 0x91, 0x78, 0x46, 0x0a, 0x44, 0x00, 0x23, 0x21, 0x62, 0x18, + 0x86, 0x81, 0x48, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, + 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, + 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, + 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, + 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, + 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, + 0x3c, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x79, 0x0c, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4f, 0x05, 0x04, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, + 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x1a, 0x4a, 0x60, 0x04, 0xa0, + 0x18, 0x8a, 0xa0, 0x24, 0x0a, 0xa4, 0x0c, 0xca, 0xa1, 0x10, 0x0a, 0xa2, + 0x30, 0xca, 0xa2, 0x34, 0x03, 0x8a, 0x58, 0xa0, 0x48, 0x48, 0x1b, 0x01, + 0xa8, 0x01, 0x0a, 0x67, 0x00, 0x68, 0x9c, 0x01, 0x20, 0x72, 0x06, 0x80, + 0xca, 0x19, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, + 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, + 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, + 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x06, 0x65, 0x82, 0x30, 0x2c, 0x1b, + 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x85, 0xb1, 0xb9, 0x09, 0xc2, 0xc0, + 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x84, 0xc1, 0x46, 0x26, 0xc9, 0x0d, + 0xae, 0x8e, 0x8e, 0xaa, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x82, 0x30, + 0x34, 0x13, 0x84, 0xc1, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, + 0x82, 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x84, 0x31, 0xe0, 0xd8, + 0x3c, 0xd5, 0xd1, 0xc1, 0xd5, 0xd1, 0x51, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, + 0x95, 0x4d, 0x10, 0xb4, 0x6c, 0xc3, 0x42, 0x44, 0x12, 0x41, 0x0c, 0xcc, + 0x34, 0x4d, 0xce, 0x86, 0x80, 0x9a, 0x20, 0x94, 0x81, 0x47, 0x03, 0x2a, + 0x4c, 0x2e, 0xac, 0x6d, 0x6e, 0x82, 0x30, 0x3c, 0x1b, 0x10, 0xc2, 0xba, + 0x08, 0x62, 0xc0, 0x80, 0x0d, 0x41, 0xb6, 0x81, 0x80, 0x2a, 0x0d, 0x98, + 0x20, 0x90, 0x41, 0xc7, 0xe4, 0x6b, 0x4a, 0x6e, 0xec, 0x2a, 0x8d, 0x8c, + 0x0e, 0x6d, 0x82, 0x30, 0x40, 0x13, 0x84, 0x21, 0x9a, 0x20, 0x0c, 0xd2, + 0x04, 0x41, 0xd3, 0x36, 0x20, 0x48, 0xe7, 0x11, 0x1f, 0x18, 0x34, 0x61, + 0x40, 0xe5, 0x6b, 0x4a, 0x6e, 0x0c, 0xa9, 0x2c, 0xed, 0x0c, 0x8d, 0x6e, + 0x03, 0x82, 0x8c, 0x81, 0x07, 0x06, 0x1f, 0x18, 0x34, 0x61, 0xc0, 0xe4, + 0x8b, 0x68, 0x8e, 0xee, 0x2a, 0x8d, 0x8c, 0x0e, 0x6d, 0x82, 0x30, 0x4c, + 0x1b, 0x10, 0xa4, 0x0c, 0x3c, 0x33, 0xf8, 0xc0, 0xa0, 0x09, 0x03, 0x2a, + 0x5f, 0x44, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x13, 0x84, + 0x81, 0xda, 0x80, 0x20, 0x68, 0xe0, 0xa5, 0xc1, 0x07, 0x06, 0x4d, 0x18, + 0x6c, 0x28, 0x30, 0x31, 0x20, 0x83, 0x33, 0x50, 0x83, 0x0d, 0x03, 0xc1, + 0xad, 0xc1, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0xc2, 0x0d, 0xdc, + 0x60, 0x43, 0xf0, 0x06, 0x1b, 0x86, 0xa1, 0x0d, 0xe0, 0x80, 0xc6, 0xd0, + 0x54, 0x53, 0x58, 0x9a, 0xdb, 0x86, 0x01, 0xc3, 0x86, 0x0d, 0x02, 0x18, + 0xcc, 0xc1, 0x86, 0xa2, 0x0d, 0xe4, 0x00, 0xd8, 0xe8, 0x80, 0x88, 0x98, + 0x5c, 0x98, 0xdb, 0x18, 0x5a, 0xd9, 0xdc, 0x04, 0x61, 0xa8, 0x68, 0x98, + 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x06, 0x8b, 0x45, 0x9a, 0xdb, + 0x1c, 0xdd, 0xdc, 0x04, 0x61, 0xb8, 0x48, 0xa4, 0xb9, 0xd1, 0xcd, 0x4d, + 0x10, 0x06, 0x8c, 0x08, 0x5d, 0x19, 0xde, 0x17, 0xdb, 0x5b, 0x18, 0x19, + 0x13, 0xba, 0x32, 0xbc, 0xaf, 0x39, 0xba, 0x37, 0xb9, 0xb2, 0x0d, 0x8c, + 0x1d, 0xdc, 0x01, 0x1e, 0xe4, 0x81, 0x1e, 0xec, 0x01, 0x1f, 0xf4, 0x81, + 0x1f, 0x30, 0x7f, 0x30, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, 0x23, + 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c, 0xec, 0xca, + 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32, 0x3c, 0x17, + 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x41, 0x51, 0x87, 0x0c, 0xcf, + 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, + 0x4a, 0x80, 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, + 0x1b, 0x2b, 0x9b, 0x9b, 0x12, 0x68, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, + 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, + 0xe6, 0xa6, 0x08, 0x6b, 0x00, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, + 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x74, + 0xd0, 0x85, 0x0c, 0xcf, 0x65, 0xec, 0xad, 0xce, 0x8d, 0xae, 0x4c, 0x6e, + 0x6e, 0x4a, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, + 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, + 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, + 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, + 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, + 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, + 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, + 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, + 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, + 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, + 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, + 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, + 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, + 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, + 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, + 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, + 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, + 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, + 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, + 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, + 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, + 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, + 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, + 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, 0xdc, + 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x11, 0x40, 0xc3, 0xe5, 0x3b, + 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x26, 0x00, 0x0d, + 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84, 0xf9, 0xc8, 0x6d, 0x1b, + 0xc2, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, + 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x25, 0x48, + 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, + 0x0b, 0x61, 0x07, 0xce, 0x70, 0xf9, 0xce, 0xe3, 0x0f, 0xce, 0x74, 0xfb, + 0xc5, 0x6d, 0xdb, 0x40, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, + 0x54, 0x44, 0x94, 0x0e, 0x30, 0xf8, 0xc5, 0x6d, 0x9b, 0x81, 0x35, 0x5c, + 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0xb0, 0x93, 0x13, 0x11, + 0x7e, 0x71, 0xdb, 0x16, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0x74, 0x44, + 0x04, 0x30, 0x88, 0x83, 0x8f, 0xdc, 0xb6, 0x15, 0x3c, 0xc3, 0xe5, 0x3b, + 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x7a, 0x4b, 0xc7, 0x6b, 0x03, 0xa6, 0xa7, 0x44, + 0xa7, 0x52, 0x67, 0xa2, 0x5e, 0x44, 0xf6, 0xda, 0x44, 0x58, 0x49, 0x4c, + 0xb0, 0x0a, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xac, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0x98, 0x0a, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, + 0xa3, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, + 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, + 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, + 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, + 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, + 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, + 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, + 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, + 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, + 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, + 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, + 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, + 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x9c, 0xc1, 0x08, + 0x40, 0x09, 0x00, 0x0a, 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, + 0x51, 0x88, 0x61, 0x18, 0x06, 0x32, 0x66, 0x00, 0x6e, 0x1a, 0x2e, 0x7f, + 0xc2, 0x1e, 0x42, 0xf2, 0x57, 0x42, 0x5a, 0x89, 0xc9, 0x2f, 0x6e, 0x1b, + 0x15, 0x08, 0x82, 0x20, 0xc3, 0x1c, 0x01, 0x42, 0xca, 0x3d, 0xc3, 0xe5, + 0x4f, 0xd8, 0x43, 0x48, 0x7e, 0x08, 0x34, 0xc3, 0x42, 0xa0, 0x60, 0x29, + 0x4a, 0x32, 0x30, 0xc3, 0x30, 0x0c, 0xc3, 0x30, 0x50, 0x53, 0x08, 0x64, + 0x40, 0x10, 0x7a, 0xca, 0x80, 0x0c, 0x08, 0x45, 0x65, 0x01, 0x06, 0x66, + 0x18, 0x06, 0x04, 0x41, 0x10, 0x85, 0xa6, 0x82, 0x20, 0x03, 0x82, 0x20, + 0x08, 0x82, 0x50, 0x75, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, + 0x6d, 0x54, 0xb1, 0x12, 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, + 0x0a, 0x71, 0x0d, 0xcc, 0x40, 0xd8, 0x1c, 0x41, 0x50, 0x0c, 0x66, 0x50, + 0x86, 0x41, 0xa3, 0x6d, 0x20, 0x60, 0x18, 0x81, 0x40, 0x66, 0x6a, 0x83, + 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, + 0x7c, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, + 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, + 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, + 0x30, 0xf0, 0x03, 0x3d, 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, + 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x40, 0xc1, 0x30, 0x93, 0x18, + 0x8c, 0x03, 0x3b, 0x84, 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, + 0xe0, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x02, 0x1f, + 0xd8, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x81, 0x39, + 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0xb0, 0x01, 0x18, 0xd0, 0x81, 0x1f, + 0x80, 0x81, 0x1f, 0x20, 0xc1, 0xfb, 0x08, 0x9c, 0x89, 0x0c, 0xc6, 0x81, + 0x1d, 0xc2, 0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x64, 0xe1, 0x16, 0x68, 0xa1, + 0x1c, 0xf0, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, + 0x0f, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, + 0x1c, 0xd8, 0xe1, 0x1d, 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, + 0x0f, 0xc0, 0xc0, 0x0f, 0x50, 0xe0, 0x91, 0x78, 0x46, 0x0a, 0x44, 0x00, + 0x23, 0x21, 0x62, 0x18, 0x86, 0x81, 0xc8, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, + 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, + 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, + 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, + 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, + 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, + 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, + 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, + 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, + 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x0c, 0x20, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, + 0x40, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, + 0x79, 0x80, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x90, 0x67, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x21, 0x4f, 0x05, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x1a, 0x4a, 0x60, 0x04, 0xa0, 0x20, 0x8a, 0xa1, 0x08, + 0x4a, 0xa2, 0x40, 0x0a, 0x81, 0xb4, 0x11, 0x00, 0x0a, 0x67, 0x00, 0x68, + 0x9c, 0x01, 0xa0, 0x72, 0x06, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, + 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, + 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, + 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x06, 0x65, + 0x82, 0x30, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x0c, 0xcc, 0x06, 0x61, + 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x86, 0x66, 0xc3, 0x80, 0x24, 0xc4, + 0x04, 0x21, 0x0c, 0x26, 0x02, 0x13, 0x84, 0xc1, 0x99, 0x20, 0x0c, 0xcf, + 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, + 0x86, 0x00, 0x9a, 0x20, 0x8c, 0x01, 0x35, 0x41, 0xd0, 0xa4, 0x0d, 0x0b, + 0x21, 0x31, 0x04, 0x31, 0x34, 0xd3, 0x34, 0x3d, 0x1b, 0x02, 0x6a, 0x82, + 0x50, 0x06, 0xd5, 0x04, 0x61, 0x80, 0x36, 0x20, 0x84, 0xc5, 0x10, 0xc4, + 0x70, 0x01, 0x1b, 0x02, 0x6c, 0x03, 0x11, 0x55, 0x19, 0x30, 0x41, 0x10, + 0x00, 0x1a, 0x43, 0x53, 0x4d, 0x61, 0x69, 0x6e, 0x13, 0x84, 0x21, 0xda, + 0x30, 0x5c, 0xd7, 0xb0, 0x41, 0xe8, 0xbc, 0x0d, 0xc5, 0xc6, 0x01, 0xda, + 0x57, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, + 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, + 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, + 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, + 0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x86, + 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, + 0x4a, 0x90, 0xd5, 0x21, 0xc3, 0x73, 0x29, 0x73, 0xa3, 0x93, 0xcb, 0x83, + 0x7a, 0x4b, 0x73, 0xa3, 0x9b, 0x9b, 0x12, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, + 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, + 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, + 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, + 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, + 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, + 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, + 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, + 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, + 0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, + 0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x11, + 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, + 0xdb, 0x26, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84, + 0xf9, 0xc8, 0x6d, 0x1b, 0xc2, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, + 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, + 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, + 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x07, 0xce, 0x70, 0xf9, 0xce, 0xe3, + 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0xdb, 0x40, 0x35, 0x5c, 0xbe, 0xf3, + 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0x94, 0x0e, 0x30, 0xf8, 0xc5, 0x6d, + 0x9b, 0x81, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, + 0xb0, 0x93, 0x13, 0x11, 0x7e, 0x71, 0xdb, 0x16, 0x20, 0x0d, 0x97, 0xef, + 0x3c, 0xfe, 0x74, 0x44, 0x04, 0x30, 0x88, 0x83, 0x8f, 0xdc, 0xb6, 0x15, + 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, + 0x03, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0b, 0x01, 0x00, 0x00, + 0x13, 0x04, 0x54, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, + 0x34, 0xcc, 0x00, 0xd4, 0x40, 0x69, 0x94, 0x5c, 0xd9, 0x95, 0x51, 0xe9, + 0x06, 0x94, 0x52, 0x31, 0x15, 0x61, 0x40, 0xb9, 0x95, 0x41, 0x1d, 0x14, + 0x52, 0x19, 0x06, 0x90, 0x52, 0x1e, 0x45, 0x30, 0x02, 0x50, 0x02, 0x84, + 0x8c, 0x11, 0x80, 0x20, 0x08, 0x92, 0x60, 0x30, 0x46, 0xb0, 0xfb, 0xa3, + 0x4c, 0x82, 0xc1, 0x18, 0x81, 0x4c, 0x8b, 0x2c, 0xfe, 0x8d, 0x11, 0x80, + 0x20, 0x08, 0xe2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0xee, 0x8d, 0x11, + 0x80, 0x20, 0x08, 0xc2, 0xdf, 0x18, 0x01, 0xdb, 0xc6, 0xaf, 0xbc, 0x8d, + 0x11, 0xe0, 0xec, 0x7d, 0xe6, 0xde, 0x18, 0x41, 0xae, 0x97, 0xee, 0xfc, + 0x8d, 0x11, 0xc0, 0x3e, 0x3b, 0x97, 0xdf, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xb0, 0xad, 0xc1, 0xc6, 0xa4, 0x41, + 0x1a, 0x88, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, 0x18, 0x6c, 0x6c, 0xc0, + 0x39, 0x6a, 0xa0, 0x06, 0x63, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, + 0x5b, 0x1b, 0x74, 0xd0, 0x1a, 0xac, 0x01, 0x19, 0x8c, 0x18, 0x18, 0x00, + 0x08, 0x82, 0x01, 0x61, 0x07, 0x1b, 0x1b, 0x8c, 0x18, 0x18, 0x00, 0x08, + 0x82, 0x01, 0x71, 0x07, 0x9c, 0x1b, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, + 0x01, 0x16, 0x07, 0xdf, 0xe0, 0x06, 0xa3, 0x09, 0x81, 0x30, 0xdc, 0x40, + 0x04, 0x64, 0x30, 0xcb, 0x10, 0x4c, 0xc1, 0x68, 0xc2, 0x30, 0x0c, 0x37, + 0x14, 0x01, 0x19, 0xcc, 0x32, 0x08, 0x53, 0x30, 0x9a, 0x50, 0x00, 0x17, + 0x20, 0x36, 0x9a, 0x70, 0x04, 0x17, 0x20, 0x76, 0x08, 0x62, 0x77, 0x20, + 0x66, 0x85, 0x40, 0x1f, 0x23, 0x04, 0xfa, 0xdc, 0x83, 0xd4, 0x3d, 0x48, + 0x19, 0x21, 0xc8, 0xc7, 0x08, 0x41, 0x3e, 0xb3, 0x04, 0xc3, 0x40, 0x05, + 0xe2, 0x06, 0x42, 0x1c, 0x14, 0x03, 0x15, 0x03, 0x3a, 0x08, 0x75, 0x50, + 0xcc, 0x12, 0x10, 0x03, 0x15, 0x08, 0x31, 0xb4, 0x01, 0x31, 0x50, 0x31, + 0xb0, 0xc3, 0xd0, 0x06, 0xc4, 0x05, 0x88, 0x1d, 0x81, 0x98, 0x09, 0x08, + 0x7c, 0x4c, 0x40, 0xe0, 0x73, 0xc2, 0x40, 0x27, 0x0c, 0x34, 0x62, 0x70, + 0x00, 0x20, 0x08, 0x06, 0x18, 0x2b, 0xe8, 0x81, 0x97, 0x0a, 0xa3, 0x09, + 0x01, 0x60, 0xc1, 0x1f, 0x80, 0x60, 0x34, 0x61, 0x08, 0x2c, 0x08, 0x05, + 0x10, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0x71, 0x0b, 0x7c, 0x70, + 0xb8, 0xc2, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x18, 0xb8, 0xd0, 0x07, + 0xc7, 0x2b, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x81, 0x91, 0x0b, 0x7d, + 0x20, 0x14, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x60, 0xe8, 0x82, 0x1f, + 0x08, 0xc4, 0x88, 0x41, 0x03, 0x80, 0x20, 0x18, 0x34, 0xba, 0xe0, 0x07, + 0x68, 0x20, 0x0b, 0x42, 0x70, 0x0a, 0xa7, 0x70, 0x0a, 0xa7, 0x30, 0x9a, + 0x10, 0x00, 0xa3, 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0x23, 0x06, 0x0b, + 0x00, 0x82, 0x60, 0x50, 0xe9, 0x42, 0x28, 0x0c, 0x42, 0xf0, 0x06, 0x70, + 0x10, 0x07, 0x16, 0x58, 0xf0, 0x31, 0x2b, 0x17, 0x40, 0x30, 0xdc, 0x10, + 0x8c, 0x02, 0x18, 0xcc, 0x32, 0x14, 0x44, 0x60, 0xda, 0x2e, 0x80, 0x60, + 0xb8, 0x21, 0x28, 0x05, 0x30, 0x98, 0x65, 0x30, 0x86, 0xc0, 0x0a, 0x3d, + 0x90, 0xcf, 0x2c, 0xc1, 0x31, 0x50, 0x81, 0xa8, 0x83, 0x91, 0x13, 0xd1, + 0x40, 0x05, 0xc2, 0x0e, 0x46, 0x4e, 0x44, 0x03, 0x15, 0x88, 0x3b, 0x18, + 0x39, 0x11, 0x0d, 0x54, 0x20, 0xf0, 0x60, 0xe4, 0x44, 0x34, 0x50, 0x81, + 0xc8, 0x83, 0x91, 0x13, 0xd1, 0x40, 0xc5, 0x60, 0x13, 0x46, 0x4f, 0x44, + 0xb3, 0x04, 0xc8, 0x40, 0x05, 0xc2, 0x1c, 0x2d, 0x01, 0x0d, 0x54, 0x20, + 0xcc, 0xd1, 0x12, 0xd0, 0x40, 0x05, 0xc2, 0x1c, 0x2d, 0x01, 0x0d, 0x54, + 0x20, 0xcc, 0xd1, 0x12, 0xd0, 0x40, 0x05, 0xc2, 0x1c, 0x2d, 0x01, 0x0d, + 0x54, 0x0c, 0x62, 0x71, 0xb4, 0x04, 0x74, 0x01, 0x62, 0x87, 0x20, 0x66, + 0x82, 0x1b, 0xc0, 0xc7, 0x04, 0x37, 0x80, 0xcf, 0x88, 0xc1, 0x01, 0x80, + 0x20, 0x18, 0x60, 0xf0, 0xe0, 0x0b, 0xa2, 0xd0, 0x0e, 0xa3, 0x09, 0x01, + 0x60, 0xc1, 0x38, 0x80, 0xe0, 0x02, 0xc4, 0x46, 0x13, 0x88, 0xc0, 0x02, + 0x73, 0x00, 0xc1, 0x05, 0x88, 0x8d, 0x18, 0x1c, 0x00, 0x08, 0x82, 0xc1, + 0xb3, 0x0f, 0xe4, 0x90, 0xb0, 0xc2, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, + 0x3c, 0xfc, 0x50, 0x0e, 0x49, 0x2b, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, + 0xc1, 0xd3, 0x0f, 0xbe, 0x20, 0x18, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, + 0xf0, 0xf8, 0xc3, 0x2f, 0x08, 0xc4, 0x09, 0x03, 0x9d, 0x30, 0xd0, 0x88, + 0x41, 0x03, 0x80, 0x20, 0x18, 0x34, 0x22, 0x61, 0x0e, 0xb0, 0xa0, 0x0f, + 0x42, 0xf0, 0x0e, 0xef, 0xf0, 0x0e, 0xef, 0x30, 0x9a, 0x10, 0x00, 0xa3, + 0x09, 0x42, 0x30, 0x9a, 0x30, 0x08, 0xa3, 0x09, 0xc4, 0x30, 0x62, 0xb0, + 0x00, 0x20, 0x08, 0x06, 0xd5, 0x48, 0xa8, 0x03, 0x31, 0x08, 0xb8, 0x90, + 0x0b, 0xba, 0x60, 0x01, 0x19, 0xc4, 0x67, 0xc4, 0xc0, 0x00, 0x40, 0x10, + 0x0c, 0xa2, 0x93, 0xf8, 0x87, 0x60, 0x38, 0x22, 0xf8, 0x05, 0xe1, 0x9b, + 0x65, 0x48, 0x94, 0x60, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x1e, 0x95, + 0x98, 0x07, 0xe2, 0x17, 0x0c, 0x0d, 0x02, 0xfa, 0x58, 0xa0, 0xc8, 0xc7, + 0x04, 0x45, 0x3e, 0x36, 0x28, 0xf2, 0x99, 0x25, 0x50, 0x06, 0x2a, 0x10, + 0x23, 0xd1, 0x90, 0x81, 0x0a, 0xc4, 0x48, 0x34, 0x64, 0xa0, 0x02, 0x31, + 0x12, 0x0d, 0xb1, 0xca, 0x15, 0xe2, 0x63, 0x95, 0x2b, 0xc4, 0x67, 0xc4, + 0xc0, 0x00, 0x40, 0x10, 0x0c, 0xa2, 0x99, 0x58, 0x09, 0x61, 0xc4, 0xc0, + 0x00, 0x40, 0x10, 0x0c, 0x22, 0x9a, 0x60, 0x09, 0x61, 0x38, 0x42, 0x38, + 0x87, 0xe0, 0x9b, 0x65, 0x68, 0x96, 0x60, 0x38, 0x62, 0x90, 0x07, 0xe1, + 0x9b, 0x65, 0x68, 0x98, 0xc0, 0x08, 0x79, 0x90, 0xcf, 0x88, 0x81, 0x01, + 0x80, 0x20, 0x18, 0x44, 0x38, 0x51, 0x12, 0x81, 0x05, 0x02, 0x7d, 0xec, + 0xa0, 0x07, 0xf9, 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x41, 0xb4, 0x13, + 0x28, 0x11, 0x58, 0x20, 0xd0, 0xc7, 0x02, 0x42, 0x3e, 0xb3, 0x04, 0xcd, + 0x40, 0x07, 0x22, 0x30, 0xee, 0xa1, 0x80, 0xc7, 0x32, 0x1c, 0xb1, 0xc4, + 0x43, 0xf0, 0xcd, 0x32, 0x40, 0x4e, 0x30, 0x1c, 0xc1, 0xf0, 0x83, 0xf0, + 0xcd, 0x32, 0x40, 0x4f, 0x60, 0x0d, 0x3f, 0xc8, 0x67, 0xc4, 0xc0, 0x00, + 0x40, 0x10, 0x0c, 0x22, 0xb1, 0x78, 0x89, 0xc0, 0x02, 0x81, 0x3e, 0x06, + 0xf9, 0x83, 0x7c, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0x20, 0x2a, 0x0b, + 0x99, 0x08, 0x2c, 0x10, 0xe8, 0x63, 0x01, 0x21, 0x9f, 0x59, 0x02, 0x68, + 0xa0, 0x03, 0x11, 0x1e, 0x11, 0x69, 0xe8, 0xc3, 0xb1, 0x60, 0x91, 0x8f, + 0x05, 0x81, 0x7c, 0x2c, 0xe8, 0xe4, 0x63, 0x42, 0x27, 0x1f, 0x1b, 0x3a, + 0xf9, 0x18, 0xa1, 0x06, 0xf2, 0x31, 0xc2, 0x14, 0xe0, 0x63, 0x84, 0x29, + 0xc0, 0xc7, 0x08, 0x53, 0x80, 0x8f, 0x11, 0xa6, 0x00, 0x1f, 0x4b, 0x4c, + 0x01, 0x3e, 0x66, 0x0a, 0x6f, 0x01, 0x82, 0xe1, 0x86, 0x20, 0x2d, 0xc0, + 0x60, 0x96, 0x21, 0x42, 0x02, 0x73, 0x85, 0xb8, 0x00, 0xc1, 0x70, 0x43, + 0xb0, 0x16, 0x60, 0x30, 0xcb, 0x20, 0x1d, 0x81, 0x25, 0x05, 0x7d, 0x2c, + 0x31, 0xe8, 0x63, 0xc9, 0x41, 0x1f, 0x4b, 0x10, 0xfa, 0x8c, 0x18, 0x38, + 0x00, 0x08, 0x82, 0xc1, 0xb4, 0x17, 0x3d, 0xd1, 0x12, 0x2a, 0x91, 0x12, + 0x6b, 0x41, 0x0c, 0x42, 0xc0, 0x13, 0xb3, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; diff --git a/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.cso b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.cso new file mode 100644 index 0000000000000000000000000000000000000000..79db65e159ec0a5057d355313449110a342d6e55 GIT binary patch literal 2940 zcmbW3&1+m`6o=2;bSCYjZEB#kRM26lSQRB1rBSiXZIX@&^dn@Fn5;r4o!FquGw zA~9&FE?lS!QI`^tcITqYYM@=YC@w@0p>F&GigYLS_uTuQeUHsPy6 z%hv{A{wN$B?CF7bP*@Tk5gr!q76M-hR;Xa|mB^(Hlk>i!{+jDe!O?-47rgvR> zJO6{;57MJQ5A!!&Yn*$%e!e+p^@~l_L6*6sY8h_>tMZG@&}{v}T+^lpmzt?Lr@%a2 zKi61TT6nWrIx_lnY3Nk#RH-&MbAGl_8d#WLtiP>8PxtdZHe7q{47C8zvn{`CLnkM% zNHC(wmDRkrc3N&qB~?EzVUlDyc~B)TrX3$2*Dmn;&LfGO-_t6nqMGJJ>BpC{M;lZr z@@?&vFtMui{`jaQZVKAD_O2j16lgKfCu~QXpO4Gce&Mrbg}d%6OfrSL&X&lI9K-D~#6;i%fSAzkha@>W1zkv!RfAjj7Ax|MTT zx%CH~oOFmwt=P1w#%ID=wdKn?bBA0m|9Q8i7udjC4QKojFB=DYkMl~<^Ek+e(-q>l zykfR%H1HG_t^azKDypF-$87MU6CHKCv;!ov4h0kr8BXa3lxB&tM6MetAlP7 z>(K%)Xf9bjp8@*pF|nD!&x#E%yMx&2vzf$1r}}Q1gPujNt*ZS;CyM{MgQ}xQzon|a()H+}pii?|c~1xQRqN(1yA68RZa&q^`_6MwjASOR!%jBD>yQuT ziZ9Q%S3O2X?)UV5bQ!v?L;m!DzD#tc`7;Zh^-TMM>}9=2H>8J;i9KoF@S|9d7ErAn z73ps6eH@#CDQFH!-PkMtjKf688>I3-_U<;68kG}U{UH<7sL0`YEI^AZa&upcS+4$VJhv;YL zw%WpTncofW<>uTJ&-WBQI@ojP+|DVn;PVbFhZue@*(v6GAiM*aJ@=k|;n(jv_E|sF z;jy4uKi+?_6F>Olo}>3QGYkJ8s`)69qsKSCHg;m{Go5Qf|L;j|hlI?SdkoUwe*@%M O;QuLcneYDva`+pL=q5@4 literal 0 HcmV?d00001 diff --git a/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.h b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.h new file mode 100644 index 00000000..6c1d540b --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_lanczos_Shader_Dx11.h @@ -0,0 +1,250 @@ +#pragma once + +inline static const unsigned char bcds_lanczos_cso[] = { + 0x44, 0x58, 0x42, 0x43, 0xbf, 0x36, 0xa7, 0x72, 0x54, 0x6d, 0x01, 0x4e, + 0x9a, 0x7c, 0xbf, 0x40, 0xf6, 0x84, 0x67, 0xe1, 0x01, 0x00, 0x00, 0x00, + 0x7c, 0x0b, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x30, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x50, 0x02, 0x00, 0x00, + 0xe0, 0x0a, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xf4, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x53, 0x43, 0x00, 0x01, 0x00, 0x00, + 0xcc, 0x01, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00, + 0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x9c, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0xb7, 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, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x49, 0x6e, 0x70, 0x75, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x00, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x54, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x00, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x00, 0xab, 0xab, + 0xb7, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, + 0xc1, 0x01, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x88, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x5f, 0x53, 0x72, 0x63, 0x57, 0x69, 0x64, 0x74, + 0x68, 0x00, 0x69, 0x6e, 0x74, 0x00, 0xab, 0xab, 0x00, 0x00, 0x02, 0x00, + 0x01, 0x00, 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, 0x82, 0x01, 0x00, 0x00, 0x5f, 0x53, 0x72, 0x63, + 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x00, 0x5f, 0x44, 0x73, 0x74, 0x57, + 0x69, 0x64, 0x74, 0x68, 0x00, 0x5f, 0x44, 0x73, 0x74, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, + 0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, + 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, + 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0x49, 0x53, 0x47, 0x4e, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x4f, 0x53, 0x47, 0x4e, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x53, 0x48, 0x45, 0x58, 0x88, 0x08, 0x00, 0x00, + 0x50, 0x00, 0x05, 0x00, 0x22, 0x02, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, + 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x9c, 0x18, 0x00, 0x04, + 0x00, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x02, 0x32, 0x00, 0x02, 0x00, 0x68, 0x00, 0x00, 0x02, + 0x0c, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x02, 0x00, + 0xe6, 0x8a, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3c, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x04, 0x03, 0x0a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x15, 0x00, 0x00, 0x01, + 0x2b, 0x00, 0x00, 0x06, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0e, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x05, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0f, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x06, 0x05, 0x02, 0x00, 0x1e, 0x00, 0x00, 0x0b, + 0xf2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x85, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0x08, 0xc2, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x08, 0x32, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, + 0x22, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x82, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x04, 0x03, 0x2a, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x2b, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0x52, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x56, 0x07, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x56, 0x07, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x01, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x05, + 0x52, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x0a, 0x52, 0x00, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x06, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x2d, 0x00, 0x00, 0x89, 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00, + 0xd2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0xc6, 0x79, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x86, 0x03, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xd0, 0xb3, 0x59, 0x3e, 0x59, 0x17, 0x37, 0x3f, 0x98, 0xdd, 0x93, 0x3d, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0x12, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1e, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x01, 0x38, 0x00, 0x00, 0x07, + 0x12, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, + 0x2b, 0x00, 0x00, 0x05, 0xf2, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, + 0xc2, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x08, 0xf2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x08, 0x62, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xfd, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, + 0x22, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x03, 0x3a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x05, 0xc2, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0xf2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, + 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0xfd, 0xff, 0xff, 0xff, + 0x30, 0x00, 0x00, 0x01, 0x22, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x03, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x05, + 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0xf2, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, + 0xf2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x1b, 0x00, 0x00, 0x05, 0x32, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0xd6, 0x05, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x89, + 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00, 0xf2, 0x00, 0x10, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, + 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0a, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0xd0, 0xb3, 0x59, 0x3e, + 0x59, 0x17, 0x37, 0x3f, 0x98, 0xdd, 0x93, 0x3d, 0x00, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0x82, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3d, 0x2a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, 0x82, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0x3a, 0x00, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0xac, 0xc5, 0x27, 0x37, 0x0e, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0xf6, 0x0f, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x32, 0x00, 0x00, 0x0a, 0xf2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x56, 0x0f, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x56, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x0b, 0xc2, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x56, 0x0d, 0x10, 0x80, 0x81, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x31, 0x00, 0x00, 0x0b, 0x32, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x40, 0x40, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x05, 0x10, 0x80, + 0x81, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0b, + 0xf2, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x80, + 0x81, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0xdb, 0x0f, 0x49, 0x40, 0x92, 0x0a, 0x86, 0x3f, 0xdb, 0x0f, 0x49, 0x40, + 0x92, 0x0a, 0x86, 0x3f, 0x4d, 0x00, 0x00, 0x06, 0xf2, 0x00, 0x10, 0x00, + 0x0b, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0x32, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0xd6, 0x05, 0x10, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x86, 0x00, 0x10, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0c, 0x32, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x37, 0x00, 0x00, 0x0c, 0xc2, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0xa6, 0x0e, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x04, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, + 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0xf2, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x0a, 0x00, 0x00, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0x82, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x01, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x00, 0x10, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x16, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x07, 0xf2, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x06, + 0xf2, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x02, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 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, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00, 0x00 + +}; diff --git a/OptiScaler/output_scaling/precompile/bcds_magc.hlsl b/OptiScaler/output_scaling/precompile/bcds_magc.hlsl new file mode 100644 index 00000000..5deb0b4d --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_magc.hlsl @@ -0,0 +1,109 @@ +cbuffer Params : register(b0) +{ + int _SrcWidth; // Source texture width + int _SrcHeight; // Source texture height + int _DstWidth; // Destination texture width + int _DstHeight; // Destination texture height +} + +Texture2D InputTexture : register(t0); // Source texture +RWTexture2D OutputTexture : register(u0); // Downsampled target texture + +// Luminance computation using perceptual weights +float luminance(float3 color) +{ + return dot(color, float3(0.2126, 0.7152, 0.0722)); +} + +// MAGC Kernel definition +float magcKernel(float x) +{ + x = abs(x); + + if (x <= 1.0) + { + return 1.0 - 2.0 * x * x + x * x * x; + } + else if (x <= 2.0) + { + return 4.0 - 8.0 * x + 5.0 * x * x - x * x * x; + } + + return 0.0; +} + +[numthreads(16, 16, 1)] +void CSMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + // Target coordinates in the downsampled texture + uint2 targetCoords = dispatchThreadID.xy; + + // Ensure thread is within bounds of the destination texture + if (targetCoords.x >= _DstWidth || targetCoords.y >= _DstHeight) + return; + + // Compute scaling factor and source position + float2 scale = float2(_SrcWidth, _SrcHeight) / float2(_DstWidth, _DstHeight); + float2 sourcePos = float2(targetCoords) * scale; + + // Base source position and fractional offset + int2 sourceBase = int2(sourcePos); + float2 fraction = frac(sourcePos); + + // Accumulators for color, weight, and luminance + float4 color = 0.0; + float totalWeight = 0.0; + float avgLuminance = 0.0; + + // First pass: Compute average luminance in the 4x4 neighborhood + for (int dy = -1; dy <= 2; dy++) + { + for (int dx = -1; dx <= 2; dx++) + { + int2 sampleCoords = sourceBase + int2(dx, dy); + sampleCoords = clamp(sampleCoords, int2(0, 0), int2(_SrcWidth - 1, _SrcHeight - 1)); + + float4 sampleColor = InputTexture.Load(int3(sampleCoords, 0)); + avgLuminance += luminance(sampleColor.rgb); + } + } + avgLuminance /= 16.0; // Normalize luminance by the 4x4 sample count + + // Second pass: Weighted color accumulation with luminance-aware clamping + for (int dy = -1; dy <= 2; dy++) + { + for (int dx = -1; dx <= 2; dx++) + { + int2 sampleCoords = sourceBase + int2(dx, dy); + sampleCoords = clamp(sampleCoords, int2(0, 0), int2(_SrcWidth - 1, _SrcHeight - 1)); + + float4 sampleColor = InputTexture.Load(int3(sampleCoords, 0)); + + // Compute the current luminance of the sample + float currentLuminance = luminance(sampleColor.rgb); + + // Scale the color to match the average luminance if it deviates too much + float luminanceDeviation = abs(currentLuminance - avgLuminance); + if (luminanceDeviation > 0.5) // Threshold for clamping + { + float luminanceScale = avgLuminance / max(currentLuminance, 1e-5); // Avoid division by zero + sampleColor.rgb *= luminanceScale; // Scale brightness while preserving hue/saturation + } + + // MAGC kernel weights + float weightX = magcKernel(float(dx) - fraction.x); + float weightY = magcKernel(float(dy) - fraction.y); + float weight = weightX * weightY; + + // Accumulate weighted color and weight + color += sampleColor * weight; + totalWeight += weight; + } + } + + // Normalize accumulated color by total weight + color /= totalWeight; + + // Output the final downsampled color + OutputTexture[dispatchThreadID.xy] = color; +} \ No newline at end of file diff --git a/OptiScaler/output_scaling/precompile/bcds_magc_Shader.cso b/OptiScaler/output_scaling/precompile/bcds_magc_Shader.cso new file mode 100644 index 0000000000000000000000000000000000000000..a868717c3dce283db2f61d35762fd90ef1fda201 GIT binary patch literal 5024 zcmeHKe^gV~9e*$H@m>h|@gS%#Ccw);3QFe-Qk3#zc?r^J!x{_itaEDuir4}RKS~u@ zo0o(nwn1XWHbc)A)H$}P!`9Q)&TaXDz-YwSYKJwWuu?`l>L_y?u07lC3)s1xot?8k zcD8f2d-A>ad%xfB{oe2QzVExAm(r~oZQ<*0b*&GqW$(LM?)q{4r}Z!dK|U!2;b1HR zqzAMeP#qv4P+s6e&={bKvQ0D?K5LsQ9#GwxbK^sQH#bx~N_&Ak@3R$u%lsL%xVuCI z;5p*r;Rpdl0^$L>yNQ-2oc`{1#}2z&2>3hlSghKLa?|dHm_kEERpe%0h1B zX!s z)QTT=3PQBobO2ILe{*vFo>^ta7tkJ)(hy1BDLZN+9VT)n+pZ$9jXPm%7m0;vq2r{L zv~e24Q&-KmrN1X$xLjX(HtA4TH2-tJT+k>QRgWncgK(G8!5purj3i6fJYj1zI?Z0^ zUNf>S3vc&1+dR%D5AyH?vMwMhj zY_~X@)B*Ys=|&3ep`x%&9?=v`AjMa0Mcp=qhnF^{EpQ{n7i>jyY(amh(2f-M!(@a_ zv#@DY;1mAQ{lY;uC1^^W4v2P4F0buX%(1B-GN~hsSjS3cdliFh>Nu0S;8%=IrUcp4 zF-SP$m-zh>!^FWoWr9*DU0FpsSREuyZt^=@jL!U8=iXWb@S-0W#Ptzz8|WcP8;v*l z@Ma3H_lO(sFnjJWjYga^h+rSwW!9?3+l+Wi1e+%C)^Haf8B!S^w=BXe*tM;|UbmAO+(=m~76mCljd*)fVhJI%6P-D5;CsTZGhaMYXQlI`_P}+Dxa6=KmRm_Oc%3Mc+Eo){Mc1wbu3g!3c=F1% zpB*kI&eer9rAdr1oL4^Tu=G&f>;uSZ{pU~BH&|(qZSZw|mER&_US%z-MPACo3{5?` zxnXv7r(0ZarPWfqvWF7Bi862HQ@URzrjdCj_4~j;_}!e3gq;nD)y?7z#gH414P6tp1 z%7^4wP!u(4=Pn~W z!fChIH2PV((p3G*lg*pb*EAnLl7v1oJhy#zWNP}&@#smkRGM3~;zxA;k8;mvGh3X( z%R9yQx=-oPe9(EyUBB7Vtqe6ETytdK_YcX}966Fydl;;pnV%T3Mx*01!5QFU`Xv8J z2!9I5N1`)R^S<#nqchVd(UwRD@HKmSwDXL>;Y+)&3Ky`;jSLaDGMixXFcLcTGBvE-kTH88N};|fs}EjVob?h9yRp-!V9*-h_>Jy zQUvZAJ5m^)OKvsd`)cv^wazBcTbyQ((`>|Bv+&l1INeU z-<%Nt&M%&&k*eWd#Z<2%9P6Vd#fVZdz^06tu(v(hf?;ieH`c!v+R&}t;6e(!LuOA7TG0=|3b*1iLJ!xLy9#0z9~Ez+rq5=kTHXz@``L@8G^A6sJtg;&dneG^`VU%cKZd3Sl$l+|86Yr1M)jq{vDwEZ^iP*L03{}`Spfc^gwo>R~D@;4t-3)pjs&?18Snz#>A4!;>N{_FVdrG#P3 zL}$4HG&yQQmW%;ZDa_;n%>D)?yo|Bt{EUGhF%TgxJD?uQ4d2H^PKXkeDpZyCR$j53 z_k`7eT|-Tle9C^27%;T_kXyxJuKY-?U=n2 zmp7iNyLtMH4X5fFHhZptwb{+b54~Y)dk}!)k)(F+v2kbde|-Ai!6y?1K@tF_QuNUr z?mJomC@&0MRc9}&kacgrez-w>Hrb>;e|U=wBPvoi(mVrihdXhq?Ss*GNqBU8*UipE z3&jr_=`zSlxvT*a=39LNtQw{G*4Nf^LjJSWXr270^Z8}aC$rn1iD@X(%`N-oyWD@s zbSxgS8vDNszwLup+5;|zXQ9ZtCq2cxJy;c8<$)+ZCYRS9T-g^O-6RR|t?(B7`pPBN zgm06(Nd+gx@Mr`(9?#NIHM)a-gQyJD25I5?WLOr?a=w9kJ0L@#bq+(@DQIVxkuO%RHtJYh{t?FBPU)#L+TC&*Q`uNmLY}wdP6vgK$c;u zZdhed`9lV*G!9R0^t%Eu2-)~OBmRqQcP46y`#NO3VpsN0NYr$dnTtRE-cJJoK{|#5 z&z`HiEXC<1#r}IOR>NZaOjANHMWkaQU^5rxr5%NH_)K=UCc8UWtAX5^e2@<1CUZcl zOh>}AG#^$>1X8wAfuR#$h5}}-MPQ`gFc9ox=OOE)L%qyzd@(>;6A=Vr=naFD$@j0j zr7n2|9a4AniU+sqK^}!JFtOrnGG%cd0HVQNXM@Y6oh1 zs9g6CC#tcFjnaqXo`5>~;H4+=w)i|G_>k@)pyd{XUnX_j2EwLJxX_=le9y-+6%7%ntvX{)Ngm)gF$*=aq*bJ911HpFgxTRZsm)TdJZoOX z9PAQ3*IpCf%?d)gydAzEog|X=(e6_1nRQ|7!>-FNmV2;@wMa#+w19yhk=KqlP)Bs`)e--cJs6oObI4o+Vxwes+pqUAqP~FpEs{kx-RFi z>mnxI^N~5M`6;6}?(4+2mL5(pm}#AK8B>7+xQ!=8Z*Mh9=2iRnzpU0O)1R$@3G+_>p@SK2yU;dovPLl-+GL<+ZXbrDtU>+)=eeLeQdj4 zjocoyVDqYD;;HI^)&3#ZBbKhj??Y+nkHRG{p5nFFEt}?{ArbtTC6E)cqxlI>!Ju~h yIiPmf`*{xv{;Pes%1R`CkAB)Rh+i literal 0 HcmV?d00001 diff --git a/OptiScaler/output_scaling/precompile/bcds_magc_Shader.h b/OptiScaler/output_scaling/precompile/bcds_magc_Shader.h new file mode 100644 index 00000000..9ce4acb7 --- /dev/null +++ b/OptiScaler/output_scaling/precompile/bcds_magc_Shader.h @@ -0,0 +1,423 @@ +#pragma once + +inline static const unsigned char bcds_magc_cso[] = { + 0x44, 0x58, 0x42, 0x43, 0x3b, 0xba, 0xd3, 0x8f, 0x37, 0xc1, 0x2f, 0x81, + 0x35, 0xd4, 0x4d, 0x88, 0xbd, 0x6d, 0xfc, 0x6d, 0x01, 0x00, 0x00, 0x00, + 0xa0, 0x13, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x4c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, + 0x0c, 0x01, 0x00, 0x00, 0xbc, 0x08, 0x00, 0x00, 0xd8, 0x08, 0x00, 0x00, + 0x53, 0x46, 0x49, 0x30, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x53, 0x47, 0x31, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x4f, 0x53, 0x47, 0x31, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x50, 0x53, 0x56, 0x30, 0x98, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x43, 0x53, 0x4d, 0x61, 0x69, 0x6e, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0xa8, 0x07, 0x00, 0x00, + 0x60, 0x00, 0x05, 0x00, 0xea, 0x01, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x90, 0x07, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0xe1, 0x01, 0x00, 0x00, + 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, + 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, 0x06, 0x10, 0x32, 0x39, + 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, 0x1e, 0x04, 0x8b, 0x62, + 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, 0xc4, 0x10, 0x32, 0x14, + 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, 0x48, 0x90, 0x14, 0x20, + 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, 0xe4, 0x48, 0x0e, 0x90, + 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, 0xe1, 0x83, 0xe5, 0x8a, + 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x40, 0x02, 0xa8, 0x0d, + 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, 0x01, 0xd5, 0x06, 0x62, + 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, 0x49, 0x18, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, 0x20, 0x4c, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, + 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, 0x13, 0x23, 0xa4, 0x84, + 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, 0x12, 0x4c, 0x8c, 0x8c, + 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x98, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, + 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, 0x31, 0x03, 0x50, 0x06, + 0x63, 0x30, 0xe8, 0x28, 0xc4, 0x30, 0x0c, 0x03, 0x25, 0x37, 0x0d, 0x97, + 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x2b, 0x21, 0xad, 0xc4, 0xe4, 0x17, 0xb7, + 0x8d, 0x0a, 0xc3, 0x30, 0x8c, 0x61, 0x8e, 0x00, 0x21, 0xe6, 0x9e, 0xe1, + 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, 0x61, 0x21, 0x50, 0xd0, + 0x14, 0x65, 0x19, 0x9c, 0x61, 0x18, 0x86, 0x61, 0x18, 0xe8, 0x29, 0x84, + 0x31, 0x18, 0x06, 0x45, 0x65, 0x01, 0x06, 0x67, 0x18, 0x06, 0xc3, 0x30, + 0x0c, 0x86, 0xa6, 0x82, 0x18, 0x83, 0x61, 0x18, 0x86, 0x61, 0x50, 0x75, + 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, + 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, 0x0a, 0x71, 0x0d, 0xce, + 0x40, 0xd8, 0x1c, 0x41, 0x50, 0x0c, 0x67, 0x60, 0x86, 0x41, 0xa3, 0x6d, + 0x20, 0x60, 0x18, 0x81, 0x30, 0x66, 0x6a, 0x83, 0x71, 0x60, 0x87, 0x70, + 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, 0x7c, 0xa0, 0x87, 0x7a, + 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, 0x7b, 0x28, 0x87, 0x71, + 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, 0x76, 0x78, 0x87, 0x70, + 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x3d, + 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, 0x5f, 0xa0, 0x87, 0x7c, + 0x80, 0x87, 0x72, 0x40, 0xc1, 0x30, 0x93, 0x18, 0x8c, 0x03, 0x3b, 0x84, + 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, 0xe0, 0x03, 0x3d, 0xd4, + 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x02, 0x1f, 0xd8, 0x43, 0x39, 0x8c, + 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x81, 0x39, 0xb0, 0xc3, 0x3b, 0x84, + 0x03, 0x3d, 0xb0, 0x01, 0x18, 0xd0, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0x20, + 0xc1, 0xfb, 0x08, 0x9c, 0x89, 0x0c, 0xc6, 0x81, 0x1d, 0xc2, 0x61, 0x1e, + 0xe6, 0xc1, 0x0d, 0x64, 0xe1, 0x16, 0x68, 0xa1, 0x1c, 0xf0, 0x81, 0x1e, + 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, 0x0f, 0xec, 0xa1, 0x1c, + 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, 0x1c, 0xd8, 0xe1, 0x1d, + 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, 0x0f, 0xc0, 0xc0, 0x0f, + 0x50, 0xe0, 0x91, 0x78, 0x46, 0x0a, 0x44, 0x00, 0x23, 0x21, 0x62, 0x18, + 0x86, 0x81, 0x48, 0x00, 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, + 0x36, 0x68, 0x87, 0x79, 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, + 0x0e, 0x6d, 0xd0, 0x0e, 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, + 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, + 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, + 0x07, 0x6d, 0x90, 0x0e, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, + 0x06, 0xe9, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, + 0x0e, 0x76, 0x40, 0x07, 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, + 0x07, 0x76, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, + 0x07, 0x76, 0x40, 0x07, 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, + 0x07, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, + 0x3c, 0x04, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x79, 0x0e, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x18, 0xf2, 0x24, 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x30, 0xe4, 0x79, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x60, 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, 0x02, 0x02, 0x60, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x4f, 0x05, 0x04, 0x40, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, + 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x1a, 0x4a, 0x60, 0x04, 0xa0, + 0x18, 0x8a, 0xa0, 0x24, 0x0a, 0xa4, 0x0c, 0xca, 0xa1, 0x10, 0x0a, 0xa2, + 0x30, 0xca, 0xa2, 0x28, 0x03, 0x4a, 0x5a, 0xa0, 0x68, 0x48, 0x1b, 0x01, + 0xa8, 0x01, 0x0a, 0x67, 0x00, 0x68, 0x9c, 0x01, 0x20, 0x72, 0x06, 0x80, + 0xca, 0x19, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, + 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, 0x8e, 0x0c, 0x6f, 0xec, + 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xe6, 0xc6, + 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, 0x4c, 0xcc, 0x46, 0xac, + 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x06, 0x65, 0x82, 0x30, 0x2c, 0x1b, + 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x85, 0xb1, 0xb9, 0x09, 0xc2, 0xc0, + 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x84, 0xc1, 0x46, 0x26, 0xc9, 0x0d, + 0xae, 0x8e, 0x8e, 0xaa, 0x0c, 0x8f, 0xae, 0x4e, 0xae, 0x6c, 0x82, 0x30, + 0x34, 0x13, 0x84, 0xc1, 0xd9, 0x20, 0x10, 0xcd, 0x86, 0x84, 0x50, 0x16, + 0x82, 0x18, 0x18, 0xc2, 0xd9, 0x10, 0x3c, 0x13, 0x84, 0x31, 0xe0, 0xd8, + 0x3c, 0xd5, 0xd1, 0xc1, 0xd5, 0xd1, 0x51, 0x95, 0xe1, 0xd1, 0xd5, 0xc9, + 0x95, 0x4d, 0x10, 0xb4, 0x6c, 0xc3, 0x42, 0x44, 0x12, 0x41, 0x0c, 0xcc, + 0x34, 0x4d, 0xce, 0x86, 0x80, 0x9a, 0x20, 0x94, 0x81, 0x47, 0x03, 0x2a, + 0x4c, 0x2e, 0xac, 0x6d, 0x6e, 0x82, 0x30, 0x3c, 0x1b, 0x10, 0xc2, 0xba, + 0x08, 0x62, 0xc0, 0x80, 0x0d, 0x41, 0xb6, 0x81, 0x80, 0x2a, 0x0d, 0x98, + 0x20, 0x90, 0x41, 0xc7, 0xe4, 0x6b, 0x4a, 0x6e, 0xec, 0x2a, 0x8d, 0x8c, + 0x0e, 0x6d, 0x82, 0x30, 0x40, 0x13, 0x84, 0x21, 0x9a, 0x20, 0x0c, 0xd2, + 0x04, 0x41, 0xd3, 0x36, 0x20, 0x48, 0xe7, 0x11, 0x1f, 0x18, 0x34, 0x61, + 0x40, 0xe5, 0x6b, 0x4a, 0x6e, 0x0c, 0xa9, 0x2c, 0xed, 0x0c, 0x8d, 0x6e, + 0x03, 0x82, 0x8c, 0x81, 0x07, 0x06, 0x1f, 0x18, 0x34, 0x61, 0xc0, 0xe4, + 0x8b, 0x68, 0x8e, 0xee, 0x2a, 0x8d, 0x8c, 0x0e, 0x6d, 0x82, 0x30, 0x4c, + 0x1b, 0x10, 0xa4, 0x0c, 0x3c, 0x33, 0xf8, 0xc0, 0xa0, 0x09, 0x03, 0x2a, + 0x5f, 0x44, 0x73, 0x74, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x13, 0x84, + 0x81, 0xda, 0x80, 0x20, 0x68, 0xe0, 0xa5, 0xc1, 0x07, 0x06, 0x4d, 0x18, + 0x6c, 0x28, 0x30, 0x31, 0x20, 0x83, 0x33, 0x50, 0x83, 0x0d, 0x03, 0xc1, + 0xad, 0xc1, 0x04, 0x41, 0x00, 0x36, 0x00, 0x1b, 0x06, 0xc2, 0x0d, 0xdc, + 0x60, 0x43, 0xf0, 0x06, 0x1b, 0x86, 0xa1, 0x0d, 0xe0, 0x80, 0xc6, 0xd0, + 0x54, 0x53, 0x58, 0x9a, 0xdb, 0x86, 0x01, 0xc3, 0x86, 0x0d, 0x02, 0x18, + 0xcc, 0xc1, 0x86, 0xa2, 0x0d, 0xe4, 0x00, 0xd8, 0xe8, 0x80, 0x88, 0x98, + 0x5c, 0x98, 0xdb, 0x18, 0x5a, 0xd9, 0xdc, 0x04, 0x61, 0xa8, 0x68, 0x98, + 0xb1, 0xbd, 0x85, 0xd1, 0xcd, 0x4d, 0x10, 0x06, 0x8b, 0x45, 0x9a, 0xdb, + 0x1c, 0xdd, 0xdc, 0x04, 0x61, 0xb8, 0x48, 0xa4, 0xb9, 0xd1, 0xcd, 0x4d, + 0x10, 0x06, 0x8c, 0x08, 0x5d, 0x19, 0xde, 0x17, 0xdb, 0x5b, 0x18, 0x19, + 0x13, 0xba, 0x32, 0xbc, 0xaf, 0x39, 0xba, 0x37, 0xb9, 0xb2, 0x0d, 0x8c, + 0x1d, 0xdc, 0x01, 0x1e, 0xe4, 0x81, 0x1e, 0xec, 0x01, 0x1f, 0xf4, 0x81, + 0x1f, 0x30, 0x7f, 0x30, 0x54, 0x61, 0x63, 0xb3, 0x6b, 0x73, 0x49, 0x23, + 0x2b, 0x73, 0xa3, 0x9b, 0x12, 0x04, 0x55, 0xc8, 0xf0, 0x5c, 0xec, 0xca, + 0xe4, 0xe6, 0xd2, 0xde, 0xdc, 0xa6, 0x04, 0x44, 0x13, 0x32, 0x3c, 0x17, + 0xbb, 0x30, 0x36, 0xbb, 0x32, 0xb9, 0x29, 0x41, 0x51, 0x87, 0x0c, 0xcf, + 0x65, 0x0e, 0x2d, 0x8c, 0xac, 0x4c, 0xae, 0xe9, 0x8d, 0xac, 0x8c, 0x6d, + 0x4a, 0x80, 0x94, 0x21, 0xc3, 0x73, 0x91, 0x2b, 0x9b, 0x7b, 0xab, 0x93, + 0x1b, 0x2b, 0x9b, 0x9b, 0x12, 0x68, 0x95, 0xc8, 0xf0, 0x5c, 0xe8, 0xf2, + 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, 0xd2, 0xde, 0xdc, + 0xe6, 0xa6, 0x08, 0x6b, 0x00, 0x07, 0x75, 0xc8, 0xf0, 0x5c, 0xca, 0xdc, + 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, 0xa6, 0x04, 0x74, + 0xd0, 0x85, 0x0c, 0xcf, 0x65, 0xec, 0xad, 0xce, 0x8d, 0xae, 0x4c, 0x6e, + 0x6e, 0x4a, 0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, 0xc4, 0xe1, 0x1c, 0x66, + 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, 0x8c, 0x42, 0x80, 0x07, + 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, 0x00, 0x0f, 0xed, 0x10, + 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, 0xc2, 0xc1, 0x1d, 0xce, + 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, 0x38, 0x84, 0x83, 0x1b, + 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, 0x3d, 0xcc, 0x78, 0x8c, + 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, 0x87, 0x70, 0x70, 0x07, + 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, 0x87, 0x19, 0xcc, 0x11, + 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, 0x30, 0x0f, 0xe3, 0xf0, + 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, 0xde, 0x21, 0x1c, 0xd8, + 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, 0x3b, 0xbc, 0x83, 0x3b, + 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, 0x3c, 0x84, 0x03, 0x3b, + 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, 0x07, 0x37, 0x68, 0x87, + 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, 0x87, 0x70, 0x60, 0x07, + 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, 0x87, 0x77, 0x80, 0x87, + 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, 0x87, 0x79, 0x98, 0x81, + 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, 0xc0, 0x0e, 0xec, 0x30, + 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xcc, 0xa1, 0x1c, 0xe4, + 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, 0xc4, 0x81, 0x1d, 0xca, + 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, 0x39, 0x98, 0x43, 0x39, + 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, 0x38, 0x88, 0x03, 0x3b, + 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, 0x3b, 0xd4, 0x03, 0x3b, + 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, 0x03, 0x7a, 0x28, 0x87, + 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, 0xe0, 0x06, 0xe4, 0x20, + 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, 0xc0, 0x0e, 0xe1, 0x90, + 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, 0xc8, 0x01, 0x1f, 0xdc, + 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, 0xdc, 0x40, 0x1c, 0xe4, + 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, + 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x15, 0x40, 0xc3, 0xe5, 0x3b, + 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x36, 0x00, 0x0d, + 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84, 0xf9, 0xc8, 0x6d, 0x1b, + 0xc2, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, 0x15, 0x05, 0x11, 0x95, + 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, 0xdc, 0xb6, 0x25, 0x48, + 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, 0x11, 0x21, 0xd0, 0x0c, + 0x0b, 0x61, 0x07, 0xce, 0x70, 0xf9, 0xce, 0xe3, 0x0f, 0xce, 0x74, 0xfb, + 0xc5, 0x6d, 0x1b, 0x41, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, + 0x54, 0x44, 0x94, 0x0e, 0x30, 0xf8, 0xc5, 0x6d, 0x9b, 0x81, 0x35, 0x5c, + 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0xb0, 0x93, 0x13, 0x11, + 0x7e, 0x71, 0xdb, 0x16, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xfe, 0x74, 0x44, + 0x04, 0x30, 0x88, 0x83, 0x8f, 0xdc, 0xb6, 0x09, 0x3c, 0xc3, 0xe5, 0x3b, + 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xa8, 0x82, 0xc0, 0x8d, 0x84, 0x0b, 0x20, 0x34, + 0x6a, 0xe8, 0xb4, 0xf2, 0x95, 0xeb, 0x93, 0x45, 0x44, 0x58, 0x49, 0x4c, + 0xc0, 0x0a, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0xb0, 0x02, 0x00, 0x00, + 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, + 0xa8, 0x0a, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, + 0xa7, 0x02, 0x00, 0x00, 0x0b, 0x82, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x13, 0x00, 0x00, 0x00, 0x07, 0x81, 0x23, 0x91, 0x41, 0xc8, 0x04, 0x49, + 0x06, 0x10, 0x32, 0x39, 0x92, 0x01, 0x84, 0x0c, 0x25, 0x05, 0x08, 0x19, + 0x1e, 0x04, 0x8b, 0x62, 0x80, 0x18, 0x45, 0x02, 0x42, 0x92, 0x0b, 0x42, + 0xc4, 0x10, 0x32, 0x14, 0x38, 0x08, 0x18, 0x4b, 0x0a, 0x32, 0x62, 0x88, + 0x48, 0x90, 0x14, 0x20, 0x43, 0x46, 0x88, 0xa5, 0x00, 0x19, 0x32, 0x42, + 0xe4, 0x48, 0x0e, 0x90, 0x11, 0x23, 0xc4, 0x50, 0x41, 0x51, 0x81, 0x8c, + 0xe1, 0x83, 0xe5, 0x8a, 0x04, 0x31, 0x46, 0x06, 0x51, 0x18, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x1b, 0x8c, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, + 0x40, 0x02, 0xa8, 0x0d, 0x86, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x03, 0x20, + 0x01, 0xd5, 0x06, 0x62, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x01, 0x90, 0x00, + 0x49, 0x18, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x13, 0x82, 0x60, 0x42, + 0x20, 0x4c, 0x08, 0x06, 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, + 0x5f, 0x00, 0x00, 0x00, 0x32, 0x22, 0x88, 0x09, 0x20, 0x64, 0x85, 0x04, + 0x13, 0x23, 0xa4, 0x84, 0x04, 0x13, 0x23, 0xe3, 0x84, 0xa1, 0x90, 0x14, + 0x12, 0x4c, 0x8c, 0x8c, 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0x9c, 0xc1, 0x08, + 0x40, 0x09, 0x00, 0x0a, 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, + 0x31, 0x03, 0x50, 0x06, 0x63, 0x30, 0xe8, 0x28, 0xc4, 0x30, 0x0c, 0x03, + 0x25, 0x37, 0x0d, 0x97, 0x3f, 0x61, 0x0f, 0x21, 0xf9, 0x2b, 0x21, 0xad, + 0xc4, 0xe4, 0x17, 0xb7, 0x8d, 0x0a, 0xc3, 0x30, 0x8c, 0x61, 0x8e, 0x00, + 0x21, 0xe6, 0x9e, 0xe1, 0xf2, 0x27, 0xec, 0x21, 0x24, 0x3f, 0x04, 0x9a, + 0x61, 0x21, 0x50, 0xd0, 0x14, 0x65, 0x19, 0x9c, 0x61, 0x18, 0x86, 0x61, + 0x18, 0xe8, 0x29, 0x84, 0x31, 0x18, 0x06, 0x45, 0x65, 0x01, 0x06, 0x67, + 0x18, 0x06, 0xc3, 0x30, 0x0c, 0x86, 0xa6, 0x82, 0x18, 0x83, 0x61, 0x18, + 0x86, 0x61, 0x50, 0x75, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, + 0x6d, 0x54, 0xb1, 0x12, 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, + 0x0a, 0x71, 0x0d, 0xce, 0x40, 0xd8, 0x1c, 0x41, 0x50, 0x0c, 0x67, 0x60, + 0x86, 0x41, 0xa3, 0x6d, 0x20, 0x60, 0x18, 0x81, 0x30, 0x66, 0x6a, 0x83, + 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x5a, 0x28, 0x07, + 0x7c, 0xa0, 0x87, 0x7a, 0x90, 0x87, 0x72, 0x90, 0x03, 0x52, 0xe0, 0x03, + 0x7b, 0x28, 0x87, 0x71, 0xa0, 0x87, 0x77, 0x90, 0x07, 0x3e, 0x30, 0x07, + 0x76, 0x78, 0x87, 0x70, 0xa0, 0x07, 0x36, 0x00, 0x03, 0x3a, 0xf0, 0x03, + 0x30, 0xf0, 0x03, 0x3d, 0xd0, 0x83, 0x76, 0x48, 0x07, 0x78, 0x98, 0x87, + 0x5f, 0xa0, 0x87, 0x7c, 0x80, 0x87, 0x72, 0x40, 0xc1, 0x30, 0x93, 0x18, + 0x8c, 0x03, 0x3b, 0x84, 0xc3, 0x3c, 0xcc, 0x83, 0x1b, 0xd0, 0x42, 0x39, + 0xe0, 0x03, 0x3d, 0xd4, 0x83, 0x3c, 0x94, 0x83, 0x1c, 0x90, 0x02, 0x1f, + 0xd8, 0x43, 0x39, 0x8c, 0x03, 0x3d, 0xbc, 0x83, 0x3c, 0xf0, 0x81, 0x39, + 0xb0, 0xc3, 0x3b, 0x84, 0x03, 0x3d, 0xb0, 0x01, 0x18, 0xd0, 0x81, 0x1f, + 0x80, 0x81, 0x1f, 0x20, 0xc1, 0xfb, 0x08, 0x9c, 0x89, 0x0c, 0xc6, 0x81, + 0x1d, 0xc2, 0x61, 0x1e, 0xe6, 0xc1, 0x0d, 0x64, 0xe1, 0x16, 0x68, 0xa1, + 0x1c, 0xf0, 0x81, 0x1e, 0xea, 0x41, 0x1e, 0xca, 0x41, 0x0e, 0x48, 0x81, + 0x0f, 0xec, 0xa1, 0x1c, 0xc6, 0x81, 0x1e, 0xde, 0x41, 0x1e, 0xf8, 0xc0, + 0x1c, 0xd8, 0xe1, 0x1d, 0xc2, 0x81, 0x1e, 0xd8, 0x00, 0x0c, 0xe8, 0xc0, + 0x0f, 0xc0, 0xc0, 0x0f, 0x50, 0xe0, 0x91, 0x78, 0x46, 0x0a, 0x44, 0x00, + 0x23, 0x21, 0x62, 0x18, 0x86, 0x81, 0xc8, 0x29, 0x00, 0x00, 0x00, 0x00, + 0x13, 0x14, 0x72, 0xc0, 0x87, 0x74, 0x60, 0x87, 0x36, 0x68, 0x87, 0x79, + 0x68, 0x03, 0x72, 0xc0, 0x87, 0x0d, 0xaf, 0x50, 0x0e, 0x6d, 0xd0, 0x0e, + 0x7a, 0x50, 0x0e, 0x6d, 0x00, 0x0f, 0x7a, 0x30, 0x07, 0x72, 0xa0, 0x07, + 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x71, 0xa0, 0x07, 0x73, 0x20, 0x07, + 0x6d, 0x90, 0x0e, 0x78, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, + 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, 0x72, 0xd0, 0x06, 0xe9, 0x30, 0x07, + 0x72, 0xa0, 0x07, 0x73, 0x20, 0x07, 0x6d, 0x90, 0x0e, 0x76, 0x40, 0x07, + 0x7a, 0x60, 0x07, 0x74, 0xd0, 0x06, 0xe6, 0x10, 0x07, 0x76, 0xa0, 0x07, + 0x73, 0x20, 0x07, 0x6d, 0x60, 0x0e, 0x73, 0x20, 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xd0, 0x06, 0xe6, 0x60, 0x07, 0x74, 0xa0, 0x07, 0x76, 0x40, 0x07, + 0x6d, 0xe0, 0x0e, 0x78, 0xa0, 0x07, 0x71, 0x60, 0x07, 0x7a, 0x30, 0x07, + 0x72, 0xa0, 0x07, 0x76, 0x40, 0x07, 0x43, 0x9e, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x04, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x79, 0x0e, 0x20, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x24, + 0x40, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xe4, + 0x79, 0x80, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, + 0xc8, 0x13, 0x01, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc0, 0x90, 0x67, 0x02, 0x02, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x21, 0x4f, 0x05, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1b, 0x10, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, 0x0b, 0x00, 0x00, 0x00, + 0x32, 0x1e, 0x98, 0x14, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, + 0xc6, 0x04, 0x43, 0x1a, 0x4a, 0x60, 0x04, 0xa0, 0x20, 0x8a, 0xa1, 0x08, + 0x4a, 0xa2, 0x40, 0x0a, 0x81, 0xb4, 0x11, 0x00, 0x0a, 0x67, 0x00, 0x68, + 0x9c, 0x01, 0xa0, 0x72, 0x06, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, + 0x41, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0xc4, + 0x8e, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, + 0x86, 0x06, 0xe6, 0xc6, 0xe5, 0x06, 0x04, 0x85, 0x26, 0xc6, 0xc6, 0x2c, + 0x4c, 0xcc, 0x46, 0xac, 0x26, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x06, 0x65, + 0x82, 0x30, 0x2c, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x0c, 0xcc, 0x06, 0x61, + 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x86, 0x66, 0xc3, 0x80, 0x24, 0xc4, + 0x04, 0x21, 0x0c, 0x26, 0x02, 0x13, 0x84, 0xc1, 0x99, 0x20, 0x0c, 0xcf, + 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, 0xcf, + 0x86, 0x00, 0x9a, 0x20, 0x8c, 0x01, 0x35, 0x41, 0xd0, 0xa4, 0x0d, 0x0b, + 0x21, 0x31, 0x04, 0x31, 0x34, 0xd3, 0x34, 0x3d, 0x1b, 0x02, 0x6a, 0x82, + 0x50, 0x06, 0xd5, 0x04, 0x61, 0x80, 0x36, 0x20, 0x84, 0xc5, 0x10, 0xc4, + 0x70, 0x01, 0x1b, 0x02, 0x6c, 0x03, 0x11, 0x55, 0x19, 0x30, 0x41, 0x10, + 0x00, 0x1a, 0x43, 0x53, 0x4d, 0x61, 0x69, 0x6e, 0x13, 0x84, 0x21, 0xda, + 0x30, 0x5c, 0xd7, 0xb0, 0x41, 0xe8, 0xbc, 0x0d, 0xc5, 0xc6, 0x01, 0xda, + 0x57, 0x85, 0x8d, 0xcd, 0xae, 0xcd, 0x25, 0x8d, 0xac, 0xcc, 0x8d, 0x6e, + 0x4a, 0x10, 0x54, 0x21, 0xc3, 0x73, 0xb1, 0x2b, 0x93, 0x9b, 0x4b, 0x7b, + 0x73, 0x9b, 0x12, 0x10, 0x4d, 0xc8, 0xf0, 0x5c, 0xec, 0xc2, 0xd8, 0xec, + 0xca, 0xe4, 0xa6, 0x04, 0x46, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, + 0xb2, 0x32, 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x41, 0x52, 0x86, + 0x0c, 0xcf, 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, + 0x4a, 0x90, 0xd5, 0x21, 0xc3, 0x73, 0x29, 0x73, 0xa3, 0x93, 0xcb, 0x83, + 0x7a, 0x4b, 0x73, 0xa3, 0x9b, 0x9b, 0x12, 0x7c, 0x00, 0x00, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x33, 0x08, 0x80, 0x1c, + 0xc4, 0xe1, 0x1c, 0x66, 0x14, 0x01, 0x3d, 0x88, 0x43, 0x38, 0x84, 0xc3, + 0x8c, 0x42, 0x80, 0x07, 0x79, 0x78, 0x07, 0x73, 0x98, 0x71, 0x0c, 0xe6, + 0x00, 0x0f, 0xed, 0x10, 0x0e, 0xf4, 0x80, 0x0e, 0x33, 0x0c, 0x42, 0x1e, + 0xc2, 0xc1, 0x1d, 0xce, 0xa1, 0x1c, 0x66, 0x30, 0x05, 0x3d, 0x88, 0x43, + 0x38, 0x84, 0x83, 0x1b, 0xcc, 0x03, 0x3d, 0xc8, 0x43, 0x3d, 0x8c, 0x03, + 0x3d, 0xcc, 0x78, 0x8c, 0x74, 0x70, 0x07, 0x7b, 0x08, 0x07, 0x79, 0x48, + 0x87, 0x70, 0x70, 0x07, 0x7a, 0x70, 0x03, 0x76, 0x78, 0x87, 0x70, 0x20, + 0x87, 0x19, 0xcc, 0x11, 0x0e, 0xec, 0x90, 0x0e, 0xe1, 0x30, 0x0f, 0x6e, + 0x30, 0x0f, 0xe3, 0xf0, 0x0e, 0xf0, 0x50, 0x0e, 0x33, 0x10, 0xc4, 0x1d, + 0xde, 0x21, 0x1c, 0xd8, 0x21, 0x1d, 0xc2, 0x61, 0x1e, 0x66, 0x30, 0x89, + 0x3b, 0xbc, 0x83, 0x3b, 0xd0, 0x43, 0x39, 0xb4, 0x03, 0x3c, 0xbc, 0x83, + 0x3c, 0x84, 0x03, 0x3b, 0xcc, 0xf0, 0x14, 0x76, 0x60, 0x07, 0x7b, 0x68, + 0x07, 0x37, 0x68, 0x87, 0x72, 0x68, 0x07, 0x37, 0x80, 0x87, 0x70, 0x90, + 0x87, 0x70, 0x60, 0x07, 0x76, 0x28, 0x07, 0x76, 0xf8, 0x05, 0x76, 0x78, + 0x87, 0x77, 0x80, 0x87, 0x5f, 0x08, 0x87, 0x71, 0x18, 0x87, 0x72, 0x98, + 0x87, 0x79, 0x98, 0x81, 0x2c, 0xee, 0xf0, 0x0e, 0xee, 0xe0, 0x0e, 0xf5, + 0xc0, 0x0e, 0xec, 0x30, 0x03, 0x62, 0xc8, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, + 0xcc, 0xa1, 0x1c, 0xe4, 0xa1, 0x1c, 0xdc, 0x61, 0x1c, 0xca, 0x21, 0x1c, + 0xc4, 0x81, 0x1d, 0xca, 0x61, 0x06, 0xd6, 0x90, 0x43, 0x39, 0xc8, 0x43, + 0x39, 0x98, 0x43, 0x39, 0xc8, 0x43, 0x39, 0xb8, 0xc3, 0x38, 0x94, 0x43, + 0x38, 0x88, 0x03, 0x3b, 0x94, 0xc3, 0x2f, 0xbc, 0x83, 0x3c, 0xfc, 0x82, + 0x3b, 0xd4, 0x03, 0x3b, 0xb0, 0xc3, 0x0c, 0xc4, 0x21, 0x07, 0x7c, 0x70, + 0x03, 0x7a, 0x28, 0x87, 0x76, 0x80, 0x87, 0x19, 0xd1, 0x43, 0x0e, 0xf8, + 0xe0, 0x06, 0xe4, 0x20, 0x0e, 0xe7, 0xe0, 0x06, 0xf6, 0x10, 0x0e, 0xf2, + 0xc0, 0x0e, 0xe1, 0x90, 0x0f, 0xef, 0x50, 0x0f, 0xf4, 0x30, 0x83, 0x81, + 0xc8, 0x01, 0x1f, 0xdc, 0x40, 0x1c, 0xe4, 0xa1, 0x1c, 0xc2, 0x61, 0x1d, + 0xdc, 0x40, 0x1c, 0xe4, 0x01, 0x00, 0x00, 0x00, 0x71, 0x20, 0x00, 0x00, + 0x27, 0x00, 0x00, 0x00, 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x15, + 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, + 0xdb, 0x36, 0x00, 0x0d, 0x97, 0xef, 0x3c, 0x7e, 0x80, 0x34, 0x40, 0x84, + 0xf9, 0xc8, 0x6d, 0x1b, 0xc2, 0x36, 0x5c, 0xbe, 0xf3, 0xf8, 0x42, 0x40, + 0x15, 0x05, 0x11, 0x95, 0x0e, 0x30, 0x94, 0x84, 0x01, 0x08, 0x98, 0x8f, + 0xdc, 0xb6, 0x25, 0x48, 0xc3, 0xe5, 0x3b, 0x8f, 0x2f, 0x44, 0x04, 0x30, + 0x11, 0x21, 0xd0, 0x0c, 0x0b, 0x61, 0x07, 0xce, 0x70, 0xf9, 0xce, 0xe3, + 0x0f, 0xce, 0x74, 0xfb, 0xc5, 0x6d, 0x1b, 0x41, 0x35, 0x5c, 0xbe, 0xf3, + 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, 0x94, 0x0e, 0x30, 0xf8, 0xc5, 0x6d, + 0x9b, 0x81, 0x35, 0x5c, 0xbe, 0xf3, 0xf8, 0x13, 0x71, 0x4d, 0x54, 0x44, + 0xb0, 0x93, 0x13, 0x11, 0x7e, 0x71, 0xdb, 0x16, 0x20, 0x0d, 0x97, 0xef, + 0x3c, 0xfe, 0x74, 0x44, 0x04, 0x30, 0x88, 0x83, 0x8f, 0xdc, 0xb6, 0x09, + 0x3c, 0xc3, 0xe5, 0x3b, 0x8f, 0x4f, 0x35, 0x40, 0x84, 0xf9, 0xc5, 0x6d, + 0x03, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, 0x0f, 0x01, 0x00, 0x00, + 0x13, 0x04, 0x56, 0x2c, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, + 0x34, 0xcc, 0x00, 0xd4, 0x40, 0x29, 0x15, 0x53, 0x19, 0x94, 0x5c, 0xd9, + 0x95, 0x6e, 0x40, 0xb1, 0x14, 0x61, 0x40, 0xb9, 0x95, 0x51, 0x19, 0x06, + 0x10, 0x53, 0x1e, 0x45, 0x30, 0x02, 0x50, 0x02, 0x64, 0x8c, 0x11, 0xe4, + 0x7a, 0xe9, 0xce, 0xdf, 0x18, 0x01, 0xce, 0xde, 0x67, 0xee, 0x8d, 0x11, + 0x80, 0x20, 0x08, 0xc2, 0x60, 0x30, 0x46, 0x00, 0x82, 0x20, 0x88, 0x82, + 0xc1, 0x18, 0x01, 0x08, 0x82, 0xa0, 0x0a, 0x06, 0x63, 0x04, 0x20, 0x08, + 0x82, 0xb8, 0x37, 0x46, 0x00, 0x82, 0x20, 0x08, 0x7f, 0x63, 0x04, 0x6c, + 0x1b, 0xbf, 0xf2, 0x36, 0x46, 0x00, 0xfb, 0xec, 0x5c, 0x7e, 0x63, 0x04, + 0x20, 0x08, 0x82, 0x20, 0x18, 0x8c, 0x11, 0x80, 0x20, 0x08, 0xe2, 0xdf, + 0x08, 0x00, 0x00, 0x00, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xb0, 0xa9, + 0x01, 0xd6, 0xa0, 0x01, 0x1a, 0x84, 0xc1, 0x88, 0x41, 0x02, 0x80, 0x20, + 0x18, 0x6c, 0x6b, 0x90, 0x3d, 0x69, 0x90, 0x06, 0x62, 0x30, 0x62, 0x90, + 0x00, 0x20, 0x08, 0x06, 0x1b, 0x1b, 0x68, 0x91, 0x1a, 0xa8, 0xc1, 0x18, + 0x8c, 0x18, 0x18, 0x00, 0x08, 0x82, 0x01, 0x51, 0x07, 0xd9, 0x1a, 0x8c, + 0x18, 0x18, 0x00, 0x08, 0x82, 0x01, 0x61, 0x07, 0x5a, 0x1b, 0x8c, 0x18, + 0x1c, 0x00, 0x08, 0x82, 0x01, 0x06, 0x07, 0xdc, 0xd0, 0x06, 0xa3, 0x09, + 0x81, 0x30, 0xdc, 0x40, 0x04, 0x64, 0x30, 0xcb, 0x10, 0x54, 0xc1, 0x68, + 0xc2, 0x30, 0x0c, 0x37, 0x14, 0x01, 0x19, 0xcc, 0x32, 0x08, 0x55, 0x30, + 0x9a, 0x50, 0x00, 0x17, 0x18, 0x36, 0x9a, 0x70, 0x04, 0x17, 0x18, 0x76, + 0x88, 0x61, 0x77, 0x18, 0x66, 0x85, 0x40, 0x1f, 0x23, 0x04, 0xfa, 0xdc, + 0x63, 0xd4, 0x3d, 0x46, 0x19, 0x21, 0xc8, 0xc7, 0x08, 0x41, 0x3e, 0x27, + 0x0c, 0x74, 0xc2, 0x40, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, 0x70, 0xa4, + 0x42, 0x1b, 0x10, 0xb3, 0x04, 0xc3, 0x40, 0x85, 0x41, 0x07, 0x42, 0x1a, + 0x14, 0x03, 0x15, 0x03, 0x3b, 0x08, 0x6d, 0x50, 0xcc, 0x12, 0x10, 0x03, + 0x15, 0x06, 0x31, 0x94, 0x01, 0x31, 0x50, 0x31, 0xc0, 0xc3, 0x50, 0x06, + 0x44, 0x05, 0x07, 0x14, 0x71, 0xc0, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, + 0x60, 0xaa, 0x60, 0x07, 0xdd, 0x29, 0x8c, 0x26, 0x04, 0x80, 0x05, 0x7d, + 0x00, 0x82, 0xd1, 0x84, 0x21, 0xb0, 0xe0, 0x0f, 0x40, 0x30, 0x62, 0x70, + 0x00, 0x20, 0x08, 0x06, 0x09, 0x2d, 0xfc, 0xc1, 0xc1, 0x0a, 0x23, 0x06, + 0x07, 0x00, 0x82, 0x60, 0x90, 0xd4, 0x02, 0x28, 0x1c, 0xad, 0x30, 0x62, + 0x70, 0x00, 0x20, 0x08, 0x06, 0x89, 0x2d, 0x80, 0x82, 0x50, 0x8c, 0x18, + 0x1c, 0x00, 0x08, 0x82, 0x41, 0x72, 0x0b, 0xa1, 0x20, 0x10, 0x23, 0x06, + 0x0d, 0x00, 0x82, 0x60, 0xf0, 0xdc, 0x02, 0x1f, 0x9c, 0x01, 0x2c, 0x08, + 0x41, 0x29, 0x94, 0x42, 0x29, 0x94, 0xc2, 0x68, 0x42, 0x00, 0x8c, 0x26, + 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x8c, 0x18, 0x2c, 0x00, 0x08, 0x82, 0x41, + 0x85, 0x0b, 0x7f, 0x30, 0x08, 0x01, 0x1c, 0xe0, 0xc1, 0x1d, 0x58, 0x20, + 0xc1, 0xc7, 0xa4, 0x5b, 0x00, 0xc1, 0x70, 0x43, 0x80, 0x0a, 0x60, 0x30, + 0xcb, 0x50, 0x10, 0x81, 0x59, 0xb9, 0x00, 0x82, 0xe1, 0x86, 0x40, 0x15, + 0xc0, 0x60, 0x96, 0xc1, 0x18, 0x82, 0x11, 0x03, 0x03, 0x00, 0x41, 0x30, + 0x38, 0xc6, 0xe1, 0x14, 0x3a, 0x33, 0xf4, 0x40, 0x3e, 0xb3, 0x04, 0xc7, + 0x40, 0x85, 0xa1, 0x0e, 0xc6, 0x58, 0x4c, 0x03, 0x15, 0x06, 0x3b, 0x18, + 0x63, 0x31, 0x0d, 0x54, 0x18, 0xee, 0x60, 0x8c, 0xc5, 0x34, 0x50, 0x61, + 0xc0, 0x83, 0x31, 0x16, 0xd3, 0x40, 0x85, 0x21, 0x0f, 0xc6, 0x58, 0x4c, + 0x03, 0x15, 0x83, 0x5a, 0x18, 0x67, 0x31, 0xcd, 0x12, 0x20, 0x03, 0x15, + 0x06, 0x73, 0xdc, 0x84, 0x34, 0x50, 0x61, 0x30, 0xc7, 0x4d, 0x48, 0x03, + 0x15, 0x06, 0x73, 0xdc, 0x84, 0x34, 0x50, 0x61, 0x30, 0xc7, 0x4d, 0x48, + 0x03, 0x15, 0x06, 0x73, 0xdc, 0x84, 0x34, 0x50, 0x31, 0xd8, 0xc5, 0x71, + 0x13, 0x52, 0x05, 0x6a, 0x00, 0x85, 0xa8, 0x01, 0x8c, 0x18, 0x1c, 0x00, + 0x08, 0x82, 0x01, 0xd6, 0x0e, 0xb9, 0x00, 0x0a, 0xea, 0x30, 0x9a, 0x10, + 0x00, 0x16, 0x80, 0x03, 0x08, 0x46, 0x13, 0x86, 0xc0, 0x02, 0x71, 0x00, + 0xc1, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x24, 0xf7, 0x20, 0x0e, 0xc7, + 0x3b, 0x8c, 0x18, 0x1c, 0x00, 0x08, 0x82, 0x41, 0x82, 0x0f, 0xe3, 0x70, + 0xc0, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, 0x18, 0x24, 0xf9, 0x30, 0x0e, + 0x42, 0x31, 0x62, 0x70, 0x00, 0x20, 0x08, 0x06, 0x89, 0x3e, 0x90, 0x83, + 0x40, 0x8c, 0x18, 0x34, 0x00, 0x08, 0x82, 0xc1, 0xa3, 0x0f, 0xbf, 0xa0, + 0x0a, 0xf3, 0x20, 0x04, 0xe8, 0x80, 0x0e, 0xe8, 0x80, 0x0e, 0xa3, 0x09, + 0x01, 0x30, 0x9a, 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x9a, 0x40, 0x0c, + 0x23, 0x06, 0x0b, 0x00, 0x82, 0x60, 0x50, 0xf1, 0xc3, 0x38, 0x10, 0x83, + 0x40, 0x0b, 0xbc, 0xb0, 0x0b, 0x16, 0x78, 0xf1, 0x19, 0x31, 0x30, 0x00, + 0x10, 0x04, 0x83, 0x63, 0x24, 0xf0, 0x21, 0x18, 0x8e, 0x08, 0x72, 0x41, + 0xf8, 0x66, 0x19, 0x12, 0x25, 0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, + 0x48, 0x24, 0xcc, 0x81, 0xc8, 0x05, 0x13, 0x83, 0x80, 0x3e, 0x16, 0x28, + 0xf2, 0x31, 0x41, 0x91, 0x8f, 0x0d, 0x8a, 0x7c, 0x66, 0x09, 0x94, 0x81, + 0x0a, 0xc3, 0x48, 0x34, 0x64, 0xa0, 0xc2, 0x30, 0x12, 0x0d, 0x19, 0xa8, + 0x30, 0x8c, 0x44, 0x43, 0xae, 0x33, 0xcc, 0x82, 0x52, 0x88, 0xcf, 0x88, + 0x81, 0x01, 0x80, 0x20, 0x18, 0x1c, 0x2f, 0x41, 0x12, 0xc1, 0x70, 0x44, + 0x10, 0x0e, 0xca, 0x37, 0xcb, 0xc0, 0x2c, 0x81, 0x09, 0x82, 0x7c, 0x2c, + 0x20, 0x07, 0xf9, 0x18, 0x39, 0x04, 0xf1, 0xb1, 0xa1, 0x90, 0x8f, 0x09, + 0x01, 0x7c, 0x66, 0x09, 0x9c, 0xe1, 0x88, 0x03, 0x1d, 0x94, 0x6f, 0x96, + 0xc1, 0x69, 0x02, 0x43, 0xe0, 0x41, 0x3e, 0x06, 0x0f, 0x41, 0x7c, 0x4c, + 0x51, 0xe4, 0x63, 0x41, 0x3c, 0xc8, 0xc7, 0x86, 0x00, 0x3e, 0x36, 0x34, + 0xf2, 0x31, 0x21, 0x88, 0xcf, 0x2c, 0x81, 0x33, 0xd0, 0x61, 0x48, 0x8b, + 0xd0, 0xf0, 0x06, 0x73, 0x75, 0x60, 0x98, 0x05, 0x7d, 0x10, 0x9f, 0x11, + 0x03, 0x03, 0x00, 0x41, 0x30, 0x38, 0xc2, 0xc2, 0x26, 0x82, 0xe1, 0x88, + 0x60, 0x1e, 0x94, 0x6f, 0x96, 0x01, 0x7a, 0x02, 0x13, 0x04, 0xf9, 0x58, + 0x60, 0x0f, 0xf2, 0x31, 0x7b, 0x08, 0xe2, 0x63, 0x43, 0x21, 0x1f, 0x13, + 0x02, 0xf8, 0xcc, 0x12, 0x48, 0xc3, 0x11, 0x87, 0x3e, 0x28, 0xdf, 0x2c, + 0x83, 0x14, 0x05, 0x86, 0x88, 0x84, 0x7c, 0x4c, 0x24, 0x82, 0xf8, 0x98, + 0xa2, 0xc8, 0xc7, 0x82, 0x91, 0x90, 0x8f, 0x0d, 0x01, 0x7c, 0x6c, 0x68, + 0xe4, 0x63, 0x42, 0x10, 0x9f, 0x59, 0x02, 0x69, 0xa0, 0xc3, 0x90, 0x1e, + 0x21, 0x02, 0x11, 0xc8, 0x82, 0x49, 0x3e, 0x16, 0xa0, 0x81, 0x7c, 0x4c, + 0x40, 0x03, 0xf9, 0xd8, 0x80, 0x06, 0xf2, 0x31, 0xa2, 0x0e, 0xe4, 0x63, + 0xc4, 0x2a, 0xc0, 0xc7, 0x88, 0x55, 0x80, 0x8f, 0x11, 0xab, 0x00, 0x1f, + 0x23, 0x56, 0x01, 0x3e, 0x96, 0xac, 0x02, 0x7c, 0x6c, 0x15, 0xe6, 0x02, + 0x04, 0xc3, 0x0d, 0x01, 0x59, 0x80, 0xc1, 0x2c, 0xc3, 0x84, 0x04, 0x36, + 0x0b, 0x75, 0x01, 0x82, 0xe1, 0x86, 0xc0, 0x2c, 0xc0, 0x60, 0x96, 0x81, + 0x3a, 0x02, 0x4b, 0x0a, 0xfa, 0x58, 0x62, 0xd0, 0xc7, 0x92, 0x83, 0x3e, + 0x96, 0x20, 0xf4, 0x19, 0x31, 0x70, 0x00, 0x10, 0x04, 0x83, 0xe9, 0x2f, + 0xc6, 0x42, 0x26, 0x5e, 0xc2, 0x25, 0xde, 0x82, 0x18, 0x84, 0x40, 0x2c, + 0x66, 0x09, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x00 +}; diff --git a/OptiScaler/output_scaling/precompile/bcds_magc_Shader_Dx11.cso b/OptiScaler/output_scaling/precompile/bcds_magc_Shader_Dx11.cso new file mode 100644 index 0000000000000000000000000000000000000000..c8e76bf81aebc274befa370c7a4107cb9c502b50 GIT binary patch literal 3340 zcmb7`O=w(I6vywp$#-l0z}8Svhmc~dD48Heib-BRI;K!<$s{#dh0sP5X_GLSKvxoj zh#w$`E(8m@kczZB7hMTvz?}=1ZUk4|D#5+}fA`%pb7vAAJ#gQ>@0|bnyyv``nZ>E; zFTeR@==<5q_22&}J^JoPw>NUmx#JHw*Qxylt>MJERO_!U0$iI+}L(^?qCDkzi2(AWpon*B4ot)et5SSZNDo%n0B~( z!u9+I+`e$sr=7j!a^>pl>({DlZhfPwJcu&qvzGD^v?sgh%&xA#xmI<{Guzcnol{`G zx_-5?xxM*DwJr=;q#2@!sljxh17k`nZ6Kk8-hJDQ;yIUs!PN7Vp13?B%>KE1?nPw5GjR+%KdL znx#}^+jWnG8!HKS|HFc~8L8*G9|^M4Vebq3Q?4U#=W&@jsr9ULT?b|>#E7L6O+K<% z@AqZ<6~$8vI$a%!d+A@WkE?|n*i8Slc#Zfo-jmK9gGYX)-2x$aO44jLtmk09sM2GT z-b_+GT1fKFsbDLYWTWjC=d7H&YvFwRL{^6`-88a6sl+mPNvcN+oe8zaM@hD*ANK_QIp;p8Ik!8#aMD#I zW3Ec_cx&+>5R!>d40|%*RjWR#oL_}12P@u*gF;Uk-sBZ(666IbU)MqzUts@ za1L>&p(Yb8xI=c%1shLj&T2Xnf0F7^r`-u1(<_~gIIu~bx+EaJeeIF&$>2K`uGetf zRRi-?Nz!unV(e&M}+zH?LIjEsEn?e8!27I7FJ8SmUZy+KUO zLO$@!7BLu(oV>lXxgYidhWzOVbimp70)3lp`0;G>J}8x1&_M<-N%d%~u4?eSJwTSbGbEPg|skdRzibpLielX<5>{-7c17ld-YyF-LZ*g(YrU#Fj z7)CMn9*Adi*>vBUk?;+ve=kkX?BL(#j`)cQ3_JCp-%e?>`OoW}dBJY{dl1_pR`l`F zYKML%UI;tbqj!nnYyMM(|8u3z#LK~r%YS)(a{e=&^&iji-wq