From a6c57f00d52e84a7ff1f7c11bf5863cbff4384fa Mon Sep 17 00:00:00 2001 From: cdozdil Date: Fri, 2 Aug 2024 17:27:59 +0300 Subject: [PATCH] merge --- OptiScaler/NVNGX_DLSS_Dx11.cpp | 4 +- OptiScaler/NVNGX_DLSS_Dx12.cpp | 2 +- OptiScaler/NVNGX_DLSS_Vk.cpp | 2 +- OptiScaler/NVNGX_Proxy.h | 42 +- OptiScaler/OptiScaler.vcxproj | 2 +- OptiScaler/RCAS_Shader_Dx11.cso | Bin 0 -> 4920 bytes OptiScaler/backends/dlss/DLSSFeature.cpp | 12 +- OptiScaler/backends/dlss/DLSSFeature_Dx11.cpp | 2 +- OptiScaler/backends/dlss/DLSSFeature_Dx12.cpp | 2 +- OptiScaler/backends/dlssd/DLSSDFeature.cpp | 4 +- .../backends/dlssd/DLSSDFeature_Dx11.cpp | 2 +- .../backends/dlssd/DLSSDFeature_Dx12.cpp | 2 +- OptiScaler/backends/fsr2/FSR2Feature_Dx11.cpp | 2 +- .../backends/fsr2/FSR2Feature_Dx11On12.cpp | 2 +- OptiScaler/backends/fsr2/FSR2Feature_Dx12.cpp | 2 +- .../fsr2_212/FSR2Feature_Dx11On12_212.cpp | 2 +- .../fsr2_212/FSR2Feature_Dx12_212.cpp | 6 +- .../backends/fsr31/FSR31Feature_Dx11On12.cpp | 2 +- .../backends/fsr31/FSR31Feature_Dx12.cpp | 2 +- OptiScaler/backends/xess/XeSSFeature.cpp | 2 +- OptiScaler/backends/xess/XeSSFeature_Dx11.cpp | 2 +- OptiScaler/backends/xess/XeSSFeature_Dx12.cpp | 2 +- OptiScaler/dllmain.cpp | 9 +- OptiScaler/imgui/imgui_common.h | 4 +- OptiScaler/imgui/imgui_overlay_dx12.cpp | 12 +- OptiScaler/output_scaling/OS_Dx11.cpp | 8 +- OptiScaler/output_scaling/OS_Dx12.cpp | 8 +- OptiScaler/rcas/RCAS_Common.h | 141 +-- OptiScaler/rcas/precompile/RCAS_Shader.cso | Bin 5900 -> 6260 bytes OptiScaler/rcas/precompile/RCAS_Shader.h | 838 +++++++++--------- .../rcas/precompile/RCAS_Shader_Dx11.cso | Bin 4196 -> 4920 bytes OptiScaler/rcas/precompile/RCAS_Shader_Dx11.h | 279 +++--- OptiScaler/rcas/precompile/rcas.hlsl | 13 +- OptiScaler/resource.h | 2 +- 34 files changed, 768 insertions(+), 646 deletions(-) create mode 100644 OptiScaler/RCAS_Shader_Dx11.cso diff --git a/OptiScaler/NVNGX_DLSS_Dx11.cpp b/OptiScaler/NVNGX_DLSS_Dx11.cpp index d44cbff5..0c69b876 100644 --- a/OptiScaler/NVNGX_DLSS_Dx11.cpp +++ b/OptiScaler/NVNGX_DLSS_Dx11.cpp @@ -603,8 +603,8 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D11_EvaluateFeature(ID3D11DeviceConte Config::Instance()->DE_Available = (deAvail > 0); } - if (Config::Instance()->OverlayMenu.value_or(true) && - Config::Instance()->CurrentFeature != nullptr && Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(90) && + if (Config::Instance()->OverlayMenu.value_or(true) && Config::Instance()->CurrentFeature != nullptr && + Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(75) && !ImGuiOverlayDx11::IsInitedDx11()) { ImGuiOverlayDx12::ShutdownDx12(); diff --git a/OptiScaler/NVNGX_DLSS_Dx12.cpp b/OptiScaler/NVNGX_DLSS_Dx12.cpp index c8165efd..420fbb86 100644 --- a/OptiScaler/NVNGX_DLSS_Dx12.cpp +++ b/OptiScaler/NVNGX_DLSS_Dx12.cpp @@ -831,7 +831,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_D3D12_EvaluateFeature(ID3D12GraphicsCom } if (Config::Instance()->OverlayMenu.value_or(true) && - Config::Instance()->CurrentFeature != nullptr && Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(90) && + Config::Instance()->CurrentFeature != nullptr && Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(75) && !ImGuiOverlayDx12::IsInitedDx12()) { contextRendering = true; diff --git a/OptiScaler/NVNGX_DLSS_Vk.cpp b/OptiScaler/NVNGX_DLSS_Vk.cpp index 73e1ada7..c51f41ed 100644 --- a/OptiScaler/NVNGX_DLSS_Vk.cpp +++ b/OptiScaler/NVNGX_DLSS_Vk.cpp @@ -731,7 +731,7 @@ NVSDK_NGX_API NVSDK_NGX_Result NVSDK_NGX_VULKAN_EvaluateFeature(VkCommandBuffer } if (Config::Instance()->OverlayMenu.value_or(true) && Config::Instance()->CurrentFeature != nullptr && !ImGuiOverlayVk::IsInitedVk() && - Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(90)) + Config::Instance()->CurrentFeature->FrameCount() > Config::Instance()->MenuInitDelay.value_or(75)) { ImGuiOverlayDx12::ShutdownDx12(); auto hwnd = Util::GetProcessWindow(); diff --git a/OptiScaler/NVNGX_Proxy.h b/OptiScaler/NVNGX_Proxy.h index 1e394063..bd71c98f 100644 --- a/OptiScaler/NVNGX_Proxy.h +++ b/OptiScaler/NVNGX_Proxy.h @@ -23,7 +23,7 @@ enum class NV_INTERFACE : uint32_t }; typedef void* (__stdcall* PFN_NvApi_QueryInterface)(NV_INTERFACE InterfaceId); -typedef NVSDK_NGX_Result(*PFN_NVSDK_NGX_GetFeatureRequirements)(IDXGIAdapter* Adapter, const NVSDK_NGX_FeatureDiscoveryInfo* FeatureDiscoveryInfo, NVSDK_NGX_FeatureRequirement* OutSupported); +typedef NVSDK_NGX_Result(*PFN_NVSDK_NGX_D3D1X_GetFeatureRequirements)(IDXGIAdapter* Adapter, const NVSDK_NGX_FeatureDiscoveryInfo* FeatureDiscoveryInfo, NVSDK_NGX_FeatureRequirement* OutSupported); typedef NVSDK_NGX_Result(*PFN_NVSDK_NGX_VULKAN_GetFeatureRequirements)(const VkInstance Instance, const VkPhysicalDevice PhysicalDevice, const NVSDK_NGX_FeatureDiscoveryInfo* FeatureDiscoveryInfo, NVSDK_NGX_FeatureRequirement* OutSupported); @@ -31,8 +31,8 @@ using PfnNvAPI_GPU_GetArchInfo = uint32_t(__stdcall*)(void* GPUHandle, NV_GPU_AR inline static PFN_NvApi_QueryInterface OriginalNvAPI_QueryInterface = nullptr; inline static PfnNvAPI_GPU_GetArchInfo OriginalNvAPI_GPU_GetArchInfo = nullptr; -inline static PFN_NVSDK_NGX_GetFeatureRequirements Original_Dx11_GetFeatureRequirements = nullptr; -inline static PFN_NVSDK_NGX_GetFeatureRequirements Original_Dx12_GetFeatureRequirements = nullptr; +inline static PFN_NVSDK_NGX_D3D1X_GetFeatureRequirements Original_D3D11_GetFeatureRequirements = nullptr; +inline static PFN_NVSDK_NGX_D3D1X_GetFeatureRequirements Original_D3D12_GetFeatureRequirements = nullptr; inline static PFN_NVSDK_NGX_VULKAN_GetFeatureRequirements Original_Vulkan_GetFeatureRequirements = nullptr; inline static uint32_t __stdcall HookedNvAPI_GPU_GetArchInfo(void* GPUHandle, NV_GPU_ARCH_INFO* ArchInfo) @@ -92,7 +92,7 @@ inline static NVSDK_NGX_Result __stdcall Hooked_Dx12_GetFeatureRequirements(IDXG { LOG_FUNC(); - auto result = Original_Dx12_GetFeatureRequirements(Adapter, FeatureDiscoveryInfo, OutSupported); + auto result = Original_D3D12_GetFeatureRequirements(Adapter, FeatureDiscoveryInfo, OutSupported); if (result == NVSDK_NGX_Result_Success && FeatureDiscoveryInfo->FeatureID == NVSDK_NGX_Feature_SuperSampling) { @@ -109,7 +109,7 @@ inline static NVSDK_NGX_Result __stdcall Hooked_Dx11_GetFeatureRequirements(IDXG { LOG_FUNC(); - auto result = Original_Dx11_GetFeatureRequirements(Adapter, FeatureDiscoveryInfo, OutSupported); + auto result = Original_D3D11_GetFeatureRequirements(Adapter, FeatureDiscoveryInfo, OutSupported); if (result == NVSDK_NGX_Result_Success && FeatureDiscoveryInfo->FeatureID == NVSDK_NGX_Feature_SuperSampling) { @@ -162,27 +162,27 @@ inline static void HookNvApi() inline static void HookNgxApi(HMODULE nvngx) { - if (Original_Dx11_GetFeatureRequirements != nullptr || Original_Dx12_GetFeatureRequirements != nullptr) + if (Original_D3D11_GetFeatureRequirements != nullptr || Original_D3D12_GetFeatureRequirements != nullptr) return; LOG_DEBUG("Trying to hook NgxApi"); - Original_Dx11_GetFeatureRequirements = (PFN_NVSDK_NGX_GetFeatureRequirements)GetProcAddress(nvngx, "NVSDK_NGX_D3D11_GetFeatureRequirements"); - Original_Dx12_GetFeatureRequirements = (PFN_NVSDK_NGX_GetFeatureRequirements)GetProcAddress(nvngx, "NVSDK_NGX_D3D12_GetFeatureRequirements"); + Original_D3D11_GetFeatureRequirements = (PFN_NVSDK_NGX_D3D1X_GetFeatureRequirements)GetProcAddress(nvngx, "NVSDK_NGX_D3D11_GetFeatureRequirements"); + Original_D3D12_GetFeatureRequirements = (PFN_NVSDK_NGX_D3D1X_GetFeatureRequirements)GetProcAddress(nvngx, "NVSDK_NGX_D3D12_GetFeatureRequirements"); Original_Vulkan_GetFeatureRequirements = (PFN_NVSDK_NGX_VULKAN_GetFeatureRequirements)GetProcAddress(nvngx, "NVSDK_NGX_VULKAN_GetFeatureRequirements"); - if (Original_Dx11_GetFeatureRequirements != nullptr || Original_Dx12_GetFeatureRequirements != nullptr) + if (Original_D3D11_GetFeatureRequirements != nullptr || Original_D3D12_GetFeatureRequirements != nullptr || Original_Vulkan_GetFeatureRequirements != nullptr) { - LOG_INFO("NVSDK_NGX_D3D1X_GetFeatureRequirements found, hooking!"); + LOG_INFO("NVSDK_NGX_XXXXXX_GetFeatureRequirements found, hooking!"); DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - if (Original_Dx11_GetFeatureRequirements != nullptr) - DetourAttach(&(PVOID&)Original_Dx11_GetFeatureRequirements, Hooked_Dx11_GetFeatureRequirements); + if (Original_D3D11_GetFeatureRequirements != nullptr) + DetourAttach(&(PVOID&)Original_D3D11_GetFeatureRequirements, Hooked_Dx11_GetFeatureRequirements); - if (Original_Dx12_GetFeatureRequirements != nullptr) - DetourAttach(&(PVOID&)Original_Dx12_GetFeatureRequirements, Hooked_Dx12_GetFeatureRequirements); + if (Original_D3D12_GetFeatureRequirements != nullptr) + DetourAttach(&(PVOID&)Original_D3D12_GetFeatureRequirements, Hooked_Dx12_GetFeatureRequirements); if (Original_Vulkan_GetFeatureRequirements != nullptr) DetourAttach(&(PVOID&)Original_Vulkan_GetFeatureRequirements, Hooked_Vulkan_GetFeatureRequirements); @@ -193,7 +193,7 @@ inline static void HookNgxApi(HMODULE nvngx) inline static void UnhookApis() { - if (OriginalNvAPI_QueryInterface != nullptr || Original_Dx11_GetFeatureRequirements != nullptr || Original_Dx12_GetFeatureRequirements != nullptr) + if (OriginalNvAPI_QueryInterface != nullptr || Original_D3D11_GetFeatureRequirements != nullptr || Original_D3D12_GetFeatureRequirements != nullptr) { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); @@ -204,16 +204,16 @@ inline static void UnhookApis() OriginalNvAPI_QueryInterface = nullptr; } - if (Original_Dx11_GetFeatureRequirements != nullptr) + if (Original_D3D11_GetFeatureRequirements != nullptr) { - DetourDetach(&(PVOID&)Original_Dx11_GetFeatureRequirements, Hooked_Dx11_GetFeatureRequirements); - Original_Dx11_GetFeatureRequirements = nullptr; + DetourDetach(&(PVOID&)Original_D3D11_GetFeatureRequirements, Hooked_Dx11_GetFeatureRequirements); + Original_D3D11_GetFeatureRequirements = nullptr; } - if (Original_Dx12_GetFeatureRequirements != nullptr) + if (Original_D3D12_GetFeatureRequirements != nullptr) { - DetourDetach(&(PVOID&)Original_Dx12_GetFeatureRequirements, Hooked_Dx12_GetFeatureRequirements); - Original_Dx12_GetFeatureRequirements = nullptr; + DetourDetach(&(PVOID&)Original_D3D12_GetFeatureRequirements, Hooked_Dx12_GetFeatureRequirements); + Original_D3D12_GetFeatureRequirements = nullptr; } if (Original_Vulkan_GetFeatureRequirements != nullptr) diff --git a/OptiScaler/OptiScaler.vcxproj b/OptiScaler/OptiScaler.vcxproj index 46b7a25b..66cece26 100644 --- a/OptiScaler/OptiScaler.vcxproj +++ b/OptiScaler/OptiScaler.vcxproj @@ -82,7 +82,7 @@ $(SolutionDir)external\vulkan\include;$(SolutionDir)external\nvngx_dlss_sdk;$(SolutionDir)external\xess\inc\xess;$(SolutionDir)external\FidelityFX-SDK\ffx-api\include\ffx_api;$(SolutionDir)external\simpleini;$(SolutionDir)external\unordered_dense\include;$(SolutionDir)external\spdlog\include;$(IncludePath) $(ProjectDir)fsr2\lib;$(ProjectDir)fsr2_212\lib;$(ProjectDir)vulkan;$(ProjectDir)d3dx;$(ProjectDir)detours;$(SolutionDir)external\xess\lib;$(LibraryPath) dxgi - D:\Folders\Games\Deep Rock Galactic\FSD\Binaries\Win64\ + D:\Folders\Games\ffxiv-dawntrail\game\ .\x64\Debug diff --git a/OptiScaler/RCAS_Shader_Dx11.cso b/OptiScaler/RCAS_Shader_Dx11.cso new file mode 100644 index 0000000000000000000000000000000000000000..988ba4262bdcb405bdac25316d55952cbc1dd4a4 GIT binary patch literal 4920 zcmb_gPi&M$6rbJFZCRCK5rbfKvmpkF8j3~mbY4j#Pd?>FE4zMT%cv?jh}cD|YSd++_` z&HHA)wm5TeeB|u)^1i>f4ZXeT=GPzpKJsVE7_(=SF@xxzLfgI$Jz5d%(x@?$#fj2y z1I7^dGa9DNJ~T5}9_Qp|&`lP{#yGbHEr+%PZ9CfCXp~RU(rAo9`+p$ltk3o6zd{T3 zjK@ZsZ_#Mi&;C2;dWn3L8>gCcRdb}#t~ZuUvD#{zqm^c5v1P7Zqb+&{4a1K4(p44}V!gGzP&r$!zfwIijXIn? zbtheR;#rk}^roo|V z{ba3ej@0LxjaK7CJGW!<(cGcK<-<8doUb->tgPh_f5d zj8Q^-jE8TyaXP|eAdegK&JANacx*Xib1{jseVG=2c0kR@qNoy z{(M{dW^FQ_Kd(6CEqnQ9trCwrbEse3XW%aHIEjnzUtHj(Z{DCY;FrXRIduxMrB2*5 zC*Fvk)P;CUC#;VV$1n!p2h?&#Ytb6Wjr9p#_zn&-C(MuH`R`p5I@VPw8)HhZ#WjGt zD_N)b$)4wf_~nr=`lm?0x0ADDJLmb~K2co|D`k)rM*?)G;P&i&#ivr~Q?VwVQW1&7~rmboL{L zJ@3f}cZq!md&Q=X^&=f)D^6%f3^}t8b&Mn3lP(^nZd)sLj3*uKz}3D-tJ$dz#E9G}iDh2tQ+BL(`IL^|f1yw5WT&23oLyP^lpS^H2tTHSUo~TxCm-i*Eg#v6 zE60$#JgzqHp6>#DyJqt_LaglBrz89%@yR2Z`x5i6b$R)=JdZTbBS-C z4`bvVciK^U#UO_H5@xT9q5GP;>A^TIzdM*yit?Qqh;^BJVn4)OcRn%>dl5RyPtMPk y9^WBc7r#TwQwOFl;Q1UH{|2PkeMZmv;QPiJVjc7oVtnEMQSANfPyWYe=HXvS58)92 literal 0 HcmV?d00001 diff --git a/OptiScaler/backends/dlss/DLSSFeature.cpp b/OptiScaler/backends/dlss/DLSSFeature.cpp index 38323021..287f1230 100644 --- a/OptiScaler/backends/dlss/DLSSFeature.cpp +++ b/OptiScaler/backends/dlss/DLSSFeature.cpp @@ -11,13 +11,13 @@ void DLSSFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) float floatValue; // override sharpness - if (Config::Instance()->OverrideSharpness.value_or(false) && !(Config::Instance()->Api == NVNGX_DX12 && Config::Instance()->RcasEnabled.value_or(false))) + if (Config::Instance()->OverrideSharpness.value_or(false) && !(Config::Instance()->Api != NVNGX_VULKAN && Config::Instance()->RcasEnabled.value_or(false))) { auto sharpness = Config::Instance()->Sharpness.value_or(0.3f); InParameters->Set(NVSDK_NGX_Parameter_Sharpness, sharpness); } // rcas enabled - else if (Config::Instance()->Api == NVNGX_DX12 && Config::Instance()->RcasEnabled.value_or(false)) + else if (Config::Instance()->Api != NVNGX_VULKAN && Config::Instance()->RcasEnabled.value_or(false)) { InParameters->Set(NVSDK_NGX_Parameter_Sharpness, 0.0f); } @@ -32,7 +32,7 @@ void DLSSFeature::ProcessEvaluateParams(NVSDK_NGX_Parameter* InParameters) unsigned int height; GetRenderResolution(InParameters, &width, &height); - LOG_FUNC_RESULT(0); + LOG_INFO("Render Size: {}x{}, Target Size: {}x{}, Display Size: {}x{}", RenderWidth(), RenderHeight(), TargetWidth(), TargetHeight(), DisplayWidth(), DisplayHeight()); } void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) @@ -132,7 +132,7 @@ void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, featureFlags); // Resolution ----------------------------- - if (Config::Instance()->Api == NVNGX_DX12 && Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false)) + if (Config::Instance()->Api != NVNGX_VULKAN && Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false)) { float ssMulti = Config::Instance()->OutputScalingMultiplier.value_or(1.5f); @@ -156,7 +156,7 @@ void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) _targetHeight = DisplayHeight(); } - if (RenderWidth() > DisplayWidth()) + if (Config::Instance()->ExtendedLimits.value_or(false) && RenderWidth() > DisplayWidth()) { _targetWidth = RenderWidth(); _targetHeight = RenderHeight(); @@ -174,6 +174,8 @@ void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth()); InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight()); + LOG_INFO("Render Size: {}x{}, Target Size: {}x{}", RenderWidth(), RenderHeight(), TargetWidth(), TargetHeight()); + unsigned int RenderPresetDLAA = 0; unsigned int RenderPresetUltraQuality = 0; unsigned int RenderPresetQuality = 0; diff --git a/OptiScaler/backends/dlss/DLSSFeature_Dx11.cpp b/OptiScaler/backends/dlss/DLSSFeature_Dx11.cpp index 96d05de9..4a0b647d 100644 --- a/OptiScaler/backends/dlss/DLSSFeature_Dx11.cpp +++ b/OptiScaler/backends/dlss/DLSSFeature_Dx11.cpp @@ -104,7 +104,7 @@ bool DLSSFeatureDx11::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_NGX_P ID3D11Resource* paramMotion = nullptr; ID3D11Resource* setBuffer = nullptr; - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); InParameters->Get(NVSDK_NGX_Parameter_Output, ¶mOutput); InParameters->Get(NVSDK_NGX_Parameter_MotionVectors, ¶mMotion); diff --git a/OptiScaler/backends/dlss/DLSSFeature_Dx12.cpp b/OptiScaler/backends/dlss/DLSSFeature_Dx12.cpp index c4a0d076..021be8e0 100644 --- a/OptiScaler/backends/dlss/DLSSFeature_Dx12.cpp +++ b/OptiScaler/backends/dlss/DLSSFeature_Dx12.cpp @@ -117,7 +117,7 @@ bool DLSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_N ID3D12Resource* paramMotion = nullptr; ID3D12Resource* setBuffer = nullptr; - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); InParameters->Get(NVSDK_NGX_Parameter_Output, ¶mOutput); InParameters->Get(NVSDK_NGX_Parameter_MotionVectors, ¶mMotion); diff --git a/OptiScaler/backends/dlssd/DLSSDFeature.cpp b/OptiScaler/backends/dlssd/DLSSDFeature.cpp index 68dac95e..023b266a 100644 --- a/OptiScaler/backends/dlssd/DLSSDFeature.cpp +++ b/OptiScaler/backends/dlssd/DLSSDFeature.cpp @@ -128,7 +128,7 @@ void DLSSDFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) InParameters->Set(NVSDK_NGX_Parameter_DLSS_Feature_Create_Flags, featureFlags); // Resolution ----------------------------- - if (Config::Instance()->Api == NVNGX_DX12 && Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false)) + if (Config::Instance()->Api != NVNGX_VULKAN && Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false)) { float ssMulti = Config::Instance()->OutputScalingMultiplier.value_or(1.5f); @@ -153,7 +153,7 @@ void DLSSDFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters) } // extended limits changes how resolution - if (RenderWidth() > DisplayWidth()) + if (Config::Instance()->ExtendedLimits.value_or(false) && RenderWidth() > DisplayWidth()) { _targetWidth = RenderWidth(); _targetHeight = RenderHeight(); diff --git a/OptiScaler/backends/dlssd/DLSSDFeature_Dx11.cpp b/OptiScaler/backends/dlssd/DLSSDFeature_Dx11.cpp index 249235a8..184a6da5 100644 --- a/OptiScaler/backends/dlssd/DLSSDFeature_Dx11.cpp +++ b/OptiScaler/backends/dlssd/DLSSDFeature_Dx11.cpp @@ -108,7 +108,7 @@ bool DLSSDFeatureDx11::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_NGX_ ID3D11Resource* paramMotion = nullptr; ID3D11Resource* setBuffer = nullptr; - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); InParameters->Get(NVSDK_NGX_Parameter_Output, ¶mOutput); InParameters->Get(NVSDK_NGX_Parameter_MotionVectors, ¶mMotion); diff --git a/OptiScaler/backends/dlssd/DLSSDFeature_Dx12.cpp b/OptiScaler/backends/dlssd/DLSSDFeature_Dx12.cpp index 1e9da03b..975a1d7e 100644 --- a/OptiScaler/backends/dlssd/DLSSDFeature_Dx12.cpp +++ b/OptiScaler/backends/dlssd/DLSSDFeature_Dx12.cpp @@ -117,7 +117,7 @@ bool DLSSDFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_ ID3D12Resource* paramMotion = nullptr; ID3D12Resource* setBuffer = nullptr; - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); InParameters->Get(NVSDK_NGX_Parameter_Output, ¶mOutput); InParameters->Get(NVSDK_NGX_Parameter_MotionVectors, ¶mMotion); diff --git a/OptiScaler/backends/fsr2/FSR2Feature_Dx11.cpp b/OptiScaler/backends/fsr2/FSR2Feature_Dx11.cpp index fa48da2e..df2ff662 100644 --- a/OptiScaler/backends/fsr2/FSR2Feature_Dx11.cpp +++ b/OptiScaler/backends/fsr2/FSR2Feature_Dx11.cpp @@ -308,7 +308,7 @@ bool FSR2FeatureDx11::Evaluate(ID3D11DeviceContext* InContext, NVSDK_NGX_Paramet LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); float sharpness = 0.0f; if (Config::Instance()->OverrideSharpness.value_or(false)) diff --git a/OptiScaler/backends/fsr2/FSR2Feature_Dx11On12.cpp b/OptiScaler/backends/fsr2/FSR2Feature_Dx11On12.cpp index 3207b9f7..0284869a 100644 --- a/OptiScaler/backends/fsr2/FSR2Feature_Dx11On12.cpp +++ b/OptiScaler/backends/fsr2/FSR2Feature_Dx11On12.cpp @@ -183,7 +183,7 @@ bool FSR2FeatureDx11on12::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_N GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); diff --git a/OptiScaler/backends/fsr2/FSR2Feature_Dx12.cpp b/OptiScaler/backends/fsr2/FSR2Feature_Dx12.cpp index e8b3854f..ab87559e 100644 --- a/OptiScaler/backends/fsr2/FSR2Feature_Dx12.cpp +++ b/OptiScaler/backends/fsr2/FSR2Feature_Dx12.cpp @@ -78,7 +78,7 @@ bool FSR2FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_N GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); params.commandList = ffxGetCommandListDX12(InCommandList); diff --git a/OptiScaler/backends/fsr2_212/FSR2Feature_Dx11On12_212.cpp b/OptiScaler/backends/fsr2_212/FSR2Feature_Dx11On12_212.cpp index f54f2204..7003a9cf 100644 --- a/OptiScaler/backends/fsr2_212/FSR2Feature_Dx11On12_212.cpp +++ b/OptiScaler/backends/fsr2_212/FSR2Feature_Dx11On12_212.cpp @@ -184,7 +184,7 @@ bool FSR2FeatureDx11on12_212::Evaluate(ID3D11DeviceContext* InDeviceContext, NVS GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); diff --git a/OptiScaler/backends/fsr2_212/FSR2Feature_Dx12_212.cpp b/OptiScaler/backends/fsr2_212/FSR2Feature_Dx12_212.cpp index 09b60250..71dfbf62 100644 --- a/OptiScaler/backends/fsr2_212/FSR2Feature_Dx12_212.cpp +++ b/OptiScaler/backends/fsr2_212/FSR2Feature_Dx12_212.cpp @@ -79,7 +79,7 @@ bool FSR2FeatureDx12_212::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVS GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); @@ -549,7 +549,7 @@ bool FSR2FeatureDx12_212::InitFSR2(const NVSDK_NGX_Parameter* InParameters) LOG_INFO("contextDesc.initFlags (LowResMV) {0:b}", _contextDesc.flags); } - if (Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false)) + if (Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && DisplayWidth() != RenderWidth()) { float ssMulti = Config::Instance()->OutputScalingMultiplier.value_or(1.5f); @@ -574,7 +574,7 @@ bool FSR2FeatureDx12_212::InitFSR2(const NVSDK_NGX_Parameter* InParameters) } // extended limits changes how resolution - if (Config::Instance()->ExtendedLimits.value_or(false) && RenderWidth() > DisplayWidth()) + if (Config::Instance()->ExtendedLimits.value_or(false) && RenderWidth() > DisplayWidth() && DisplayWidth() != RenderWidth()) { _contextDesc.maxRenderSize.width = RenderWidth(); _contextDesc.maxRenderSize.height = RenderHeight(); diff --git a/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp b/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp index b7b1d98d..9053ac9a 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp +++ b/OptiScaler/backends/fsr31/FSR31Feature_Dx11On12.cpp @@ -224,7 +224,7 @@ bool FSR31FeatureDx11on12::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_ GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); diff --git a/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp b/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp index 6423b8e4..298592b9 100644 --- a/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp +++ b/OptiScaler/backends/fsr31/FSR31Feature_Dx12.cpp @@ -120,7 +120,7 @@ bool FSR31FeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_ GetRenderResolution(InParameters, ¶ms.renderSize.width, ¶ms.renderSize.height); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.renderSize.width, params.renderSize.height); diff --git a/OptiScaler/backends/xess/XeSSFeature.cpp b/OptiScaler/backends/xess/XeSSFeature.cpp index 2abb2c68..ca0df1db 100644 --- a/OptiScaler/backends/xess/XeSSFeature.cpp +++ b/OptiScaler/backends/xess/XeSSFeature.cpp @@ -215,7 +215,7 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa _targetHeight = DisplayHeight(); } - if (RenderWidth() > DisplayWidth()) + if (Config::Instance()->ExtendedLimits.value_or(false) && RenderWidth() > DisplayWidth()) { _targetWidth = RenderWidth(); _targetHeight = RenderHeight(); diff --git a/OptiScaler/backends/xess/XeSSFeature_Dx11.cpp b/OptiScaler/backends/xess/XeSSFeature_Dx11.cpp index a0e853e3..3f1c7ef3 100644 --- a/OptiScaler/backends/xess/XeSSFeature_Dx11.cpp +++ b/OptiScaler/backends/xess/XeSSFeature_Dx11.cpp @@ -196,7 +196,7 @@ bool XeSSFeatureDx11::Evaluate(ID3D11DeviceContext* InDeviceContext, NVSDK_NGX_P auto sharpness = GetSharpness(InParameters); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.inputWidth, params.inputHeight); diff --git a/OptiScaler/backends/xess/XeSSFeature_Dx12.cpp b/OptiScaler/backends/xess/XeSSFeature_Dx12.cpp index 409a8838..a48a08d4 100644 --- a/OptiScaler/backends/xess/XeSSFeature_Dx12.cpp +++ b/OptiScaler/backends/xess/XeSSFeature_Dx12.cpp @@ -79,7 +79,7 @@ bool XeSSFeatureDx12::Evaluate(ID3D12GraphicsCommandList* InCommandList, NVSDK_N float ssMulti = Config::Instance()->OutputScalingMultiplier.value_or(1.5f); - bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != DisplayWidth(); + bool useSS = Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false) && RenderWidth() != TargetWidth(); LOG_DEBUG("Input Resolution: {0}x{1}", params.inputWidth, params.inputHeight); diff --git a/OptiScaler/dllmain.cpp b/OptiScaler/dllmain.cpp index 757661a8..540d8dab 100644 --- a/OptiScaler/dllmain.cpp +++ b/OptiScaler/dllmain.cpp @@ -1155,6 +1155,9 @@ static void CheckWorkingMode() isNvngxMode = true; isWorkingWithEnabler = lCaseFilename == "dlss-enabler-upscaler.dll"; + if (isWorkingWithEnabler) + Config::Instance()->LogToNGX = true; + modeFound = true; break; } @@ -1427,7 +1430,7 @@ static void CheckWorkingMode() } while (false); // hook dxgi when not working as dxgi.dll - if (!Config::Instance()->IsDxgiMode && Config::Instance()->DxgiSpoofing.value_or(true)) + if (!isWorkingWithEnabler && !Config::Instance()->IsDxgiMode && Config::Instance()->DxgiSpoofing.value_or(true)) { LOG_INFO("DxgiSpoofing is enabled loading dxgi.dll"); @@ -1502,7 +1505,9 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserv PrepareLogger(); spdlog::warn("{0} loaded", VER_PRODUCT_NAME); spdlog::warn("---------------------------------"); - spdlog::warn("OptiScaler is freely downloadable from https://github.com/cdozdil/OptiScaler/releases"); + spdlog::warn("OptiScaler is freely downloadable from"); + spdlog::warn("GitHub : https://github.com/cdozdil/OptiScaler/releases"); + spdlog::warn("Nexus : https://www.nexusmods.com/site/mods/986"); spdlog::warn("If you paid for these files, you've been scammed!"); spdlog::warn("DO NOT USE IN MULTIPLAYER GAMES"); spdlog::warn(""); diff --git a/OptiScaler/imgui/imgui_common.h b/OptiScaler/imgui/imgui_common.h index aad4e15b..317bfe60 100644 --- a/OptiScaler/imgui/imgui_common.h +++ b/OptiScaler/imgui/imgui_common.h @@ -386,7 +386,6 @@ private: } } - // END - REINIT MENU //if ((msg == WM_KEYDOWN && wParam == Config::Instance()->ResetKey.value_or(VK_END)) || vmInputReset) //{ @@ -396,8 +395,7 @@ private: // INSERT - OPEN MENU if (((msg == WM_KEYDOWN && wParam == Config::Instance()->ShortcutKey.value_or(VK_INSERT)) || vmInputMenu) && - Config::Instance()->CurrentFeature != nullptr && - Config::Instance()->CurrentFeature->FrameCount() > (170 + Config::Instance()->MenuInitDelay.value_or(90))) + Config::Instance()->CurrentFeature != nullptr && Config::Instance()->CurrentFeature->FrameCount() > 75) { _isVisible = !_isVisible; diff --git a/OptiScaler/imgui/imgui_overlay_dx12.cpp b/OptiScaler/imgui/imgui_overlay_dx12.cpp index 981ebba7..824630bb 100644 --- a/OptiScaler/imgui/imgui_overlay_dx12.cpp +++ b/OptiScaler/imgui/imgui_overlay_dx12.cpp @@ -230,7 +230,9 @@ static bool IsActivePath(SwapchainSource source, bool justQuery = false) { case Dx12: // native need 2x more frames to be sure because of fg - result = (_nativeCounter > 170 || _nativeCounterEB > 170) && !IsActivePath(SL, true) && !IsActivePath(FSR3_Mod, true) && !IsActivePath(FSR3_Native, true) && _usingNative && _cqDx12 != nullptr; + result = ((_slCounter == 0 && _fsr3ModCounter == 0 && _fsr3NativeCounter == 0 && (_nativeCounter > 75 || _nativeCounterEB > 75)) || + (_nativeCounter > 170 || _nativeCounterEB > 170)) && + !IsActivePath(SL, true) && !IsActivePath(FSR3_Mod, true) && !IsActivePath(FSR3_Native, true) && _usingNative && _cqDx12 != nullptr; if (result) g_pd3dCommandQueue = _cqDx12; @@ -238,7 +240,8 @@ static bool IsActivePath(SwapchainSource source, bool justQuery = false) break; case SL: - result = _slCounter > 75 && !IsActivePath(FSR3_Native, true) && _usingDLSSG && _cqDx12 != nullptr; + result = ((_fsr3ModCounter == 0 && _fsr3NativeCounter == 0 && _slCounter > 65) || _slCounter > 75) && + !IsActivePath(FSR3_Native, true) && _usingDLSSG && _cqDx12 != nullptr; if (result) g_pd3dCommandQueue = _cqDx12; @@ -246,7 +249,8 @@ static bool IsActivePath(SwapchainSource source, bool justQuery = false) break; case FSR3_Mod: - result = _fsr3ModCounter > 65 && !IsActivePath(FSR3_Native, true) && _usingFSR3_Mod && _cqDx12 != nullptr; + result = ((_fsr3NativeCounter == 0 && _fsr3ModCounter > 30) || _fsr3ModCounter > 65) && + !IsActivePath(FSR3_Native, true) && _usingFSR3_Mod && _cqDx12 != nullptr; if (result) g_pd3dCommandQueue = _cqDx12; @@ -2083,7 +2087,7 @@ static void RenderImGui_DX12(IDXGISwapChain3* pSwapChain) { // Wait until upscaler feature is ready if (Config::Instance()->CurrentFeature != nullptr && - Config::Instance()->CurrentFeature->FrameCount() <= Config::Instance()->MenuInitDelay.value_or(90) + 10) + Config::Instance()->CurrentFeature->FrameCount() <= Config::Instance()->MenuInitDelay.value_or(75) + 10) { if (ImGuiOverlayBase::IsVisible()) { diff --git a/OptiScaler/output_scaling/OS_Dx11.cpp b/OptiScaler/output_scaling/OS_Dx11.cpp index 203f82db..6a873079 100644 --- a/OptiScaler/output_scaling/OS_Dx11.cpp +++ b/OptiScaler/output_scaling/OS_Dx11.cpp @@ -23,13 +23,15 @@ bool OS_Dx11::CreateBufferResource(ID3D11Device* InDevice, ID3D11Resource* InRes D3D11_TEXTURE2D_DESC texDesc; originalTexture->GetDesc(&texDesc); + auto targetWidth = texDesc.Width > InWidth ? texDesc.Width : InWidth; + auto targetHeight = texDesc.Height > InHeight ? texDesc.Height : InHeight; if (_buffer != nullptr) { D3D11_TEXTURE2D_DESC bufDesc; _buffer->GetDesc(&bufDesc); - if (bufDesc.Width != InWidth || bufDesc.Height != InHeight || bufDesc.Format != texDesc.Format) + if (bufDesc.Width != targetWidth || bufDesc.Height != targetHeight || bufDesc.Format != texDesc.Format) { _buffer->Release(); _buffer = nullptr; @@ -40,8 +42,8 @@ bool OS_Dx11::CreateBufferResource(ID3D11Device* InDevice, ID3D11Resource* InRes LOG_DEBUG("[{0}] Start!", _name); - texDesc.Width = InWidth; - texDesc.Height = InHeight; + texDesc.Width = targetWidth; + texDesc.Height = targetHeight; texDesc.BindFlags |= D3D11_BIND_UNORDERED_ACCESS; result = InDevice->CreateTexture2D(&texDesc, nullptr, &_buffer); diff --git a/OptiScaler/output_scaling/OS_Dx12.cpp b/OptiScaler/output_scaling/OS_Dx12.cpp index af566df5..c9cad5ff 100644 --- a/OptiScaler/output_scaling/OS_Dx12.cpp +++ b/OptiScaler/output_scaling/OS_Dx12.cpp @@ -35,12 +35,14 @@ bool OS_Dx12::CreateBufferResource(ID3D12Device* InDevice, ID3D12Resource* InSou return false; D3D12_RESOURCE_DESC texDesc = InSource->GetDesc(); + auto targetWidth = texDesc.Width > InWidth ? texDesc.Width : InWidth; + auto targetHeight = texDesc.Height > InHeight ? texDesc.Height : InHeight; if (_buffer != nullptr) { auto bufDesc = _buffer->GetDesc(); - if (bufDesc.Width != (UINT64)(InWidth) || bufDesc.Height != (UINT)(InHeight) || bufDesc.Format != texDesc.Format) + if (bufDesc.Width != targetWidth || bufDesc.Height != targetHeight || bufDesc.Format != texDesc.Format) { _buffer->Release(); _buffer = nullptr; @@ -62,8 +64,8 @@ bool OS_Dx12::CreateBufferResource(ID3D12Device* InDevice, ID3D12Resource* InSou } texDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET | D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS | D3D12_RESOURCE_FLAG_ALLOW_SIMULTANEOUS_ACCESS; - texDesc.Width = InWidth; - texDesc.Height = InHeight; + texDesc.Width = targetWidth; + texDesc.Height = targetHeight; hr = InDevice->CreateCommittedResource(&heapProperties, D3D12_HEAP_FLAG_NONE, &texDesc, InState, nullptr, IID_PPV_ARGS(&_buffer)); diff --git a/OptiScaler/rcas/RCAS_Common.h b/OptiScaler/rcas/RCAS_Common.h index 05760813..418c07c5 100644 --- a/OptiScaler/rcas/RCAS_Common.h +++ b/OptiScaler/rcas/RCAS_Common.h @@ -25,10 +25,10 @@ struct RcasConstants int DisplayHeight; }; +static std::string rcasCode = R"( // Based on this Reshade shader // https://github.com/RdenBlaauwen/RCAS-for-ReShade -static std::string rcasCode = R"( cbuffer Params : register(b0) { float Sharpness; @@ -53,93 +53,102 @@ Texture2D Motion : register(t1); RWTexture2D Dest : register(u0); float getRCASLuma(float3 rgb) -{ +{ return dot(rgb, float3(0.598, 1.174, 0.228)); } [numthreads(32, 32, 1)] void CSMain(uint3 DTid : SV_DispatchThreadID) { - float setSharpness = Sharpness; + float setSharpness = Sharpness; - if(DynamicSharpenEnabled > 0) - { - float2 mv; - float motion; - float add = 0.0f; + if (DynamicSharpenEnabled > 0) + { + float2 mv; + float motion; + float add = 0.0f; - if(DisplaySizeMV > 0) - mv = Motion.Load(int3(DTid.x, DTid.y, 0)).rg; - else - mv = Motion.Load(int3(DTid.x * MotionTextureScale, DTid.y * MotionTextureScale, 0)).rg; + if (DisplaySizeMV > 0) + mv = Motion.Load(int3(DTid.x, DTid.y, 0)).rg; + else + mv = Motion.Load(int3(DTid.x * MotionTextureScale, DTid.y * MotionTextureScale, 0)).rg; - motion = max(abs(mv.r * MvScaleX), abs(mv.g * MvScaleY)); + motion = max(abs(mv.r * MvScaleX), abs(mv.g * MvScaleY)); - if(motion > Threshold) - add = (motion / (ScaleLimit - Threshold)) * MotionSharpness; + if (motion > Threshold) + add = (motion / (ScaleLimit - Threshold)) * MotionSharpness; - if((add > MotionSharpness && MotionSharpness > 0.0f) || (add < MotionSharpness && MotionSharpness < 0.0f)) - add = MotionSharpness; + if ((add > MotionSharpness && MotionSharpness > 0.0f) || (add < MotionSharpness && MotionSharpness < 0.0f)) + add = MotionSharpness; - setSharpness += add; + setSharpness += add; - if(setSharpness > 1.0f) - setSharpness = 1.0f; - else if (setSharpness < 0.0f) - setSharpness = 0.0f; - } + if (setSharpness > 1.0f) + setSharpness = 1.0f; + else if (setSharpness < 0.0f) + setSharpness = 0.0f; + } + + float3 e = Source.Load(int3(DTid.x, DTid.y, 0)).rgb; + + // skip sharpening if set value == 0 + if (setSharpness == 0.0f) + { + if (Debug > 0 && DynamicSharpenEnabled > 0 && Sharpness > 0) + e.g *= 1 + (12.0f * Sharpness); - float3 e = Source.Load(int3(DTid.x, DTid.y, 0)).rgb; - - // skip sharpening if set value == 0 - if(setSharpness == 0.0f) - { - if(Debug > 0 && DynamicSharpenEnabled > 0 && Sharpness > 0) - e.g *= 1 + (12.0f * Sharpness); + Dest[DTid.xy] = e; + return; + } - Dest[DTid.xy] = e; - return; - } - - float3 b = Source.Load(int3(DTid.x, DTid.y - 1, 0)).rgb; - float3 d = Source.Load(int3(DTid.x - 1, DTid.y, 0)).rgb; - float3 f = Source.Load(int3(DTid.x + 1, DTid.y, 0)).rgb; - float3 h = Source.Load(int3(DTid.x, DTid.y + 1, 0)).rgb; + float3 b = Source.Load(int3(DTid.x, DTid.y - 1, 0)).rgb; + float3 d = Source.Load(int3(DTid.x - 1, DTid.y, 0)).rgb; + float3 f = Source.Load(int3(DTid.x + 1, DTid.y, 0)).rgb; + float3 h = Source.Load(int3(DTid.x, DTid.y + 1, 0)).rgb; - // Get lumas times 2. Should use luma weights that are twice as large as normal. - float bL = getRCASLuma(b); - float dL = getRCASLuma(d); - float eL = getRCASLuma(e); - float fL = getRCASLuma(f); - float hL = getRCASLuma(h); + // Get lumas times 2. Should use luma weights that are twice as large as normal. + float bL = getRCASLuma(b); + float dL = getRCASLuma(d); + float eL = getRCASLuma(e); + float fL = getRCASLuma(f); + float hL = getRCASLuma(h); - // Min and max of ring. - float3 minRGB = min(min(b, d), min(f, h)); - float3 maxRGB = max(max(b, d), max(f, h)); + // denoise + float nz = (bL + dL + fL + hL) * 0.25 - eL; + float range = max(max(max(bL, dL), max(hL, fL)), eL) - min(min(min(bL, dL), min(eL, fL)), hL); + nz = saturate(abs(nz) * rcp(range)); + nz = -0.5 * nz + 1.0; + + // Min and max of ring. + float3 minRGB = min(min(b, d), min(f, h)); + float3 maxRGB = max(max(b, d), max(f, h)); - // Immediate constants for peak range. - float2 peakC = float2(1.0, -4.0); + // Immediate constants for peak range. + float2 peakC = float2(1.0, -4.0); - // Limiters, these need to use high precision reciprocal operations. - // Decided to use standard rcp for now in hopes of optimizing it - float3 hitMin = minRGB * rcp(4.0 * maxRGB); - float3 hitMax = (peakC.xxx - maxRGB) * rcp(4.0 * minRGB + peakC.yyy); - float3 lobeRGB = max(-hitMin, hitMax); - float lobe = max(-0.1875, min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.0)) * setSharpness; + // Limiters, these need to use high precision reciprocal operations. + // Decided to use standard rcp for now in hopes of optimizing it + float3 hitMin = minRGB * rcp(4.0 * maxRGB); + float3 hitMax = (peakC.xxx - maxRGB) * rcp(4.0 * minRGB + peakC.yyy); + float3 lobeRGB = max(-hitMin, hitMax); + float lobe = max(-0.1875, min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.0)) * setSharpness * nz; + + // denoise + lobe *= nz; - // Resolve, which needs medium precision rcp approximation to avoid visible tonality changes. - float rcpL = rcp(4.0 * lobe + 1.0); - float3 output = ((b + d + f + h) * lobe + e) * rcpL; + // Resolve, which needs medium precision rcp approximation to avoid visible tonality changes. + float rcpL = rcp(4.0 * lobe + 1.0); + float3 output = ((b + d + f + h) * lobe + e) * rcpL; - if(Debug > 0 && DynamicSharpenEnabled > 0) - { - if(Sharpness < setSharpness) - output.r *= 1 + (12.0f * (setSharpness - Sharpness)); - else - output.g *= 1 + (12.0f * (Sharpness - setSharpness)); - } + if (Debug > 0 && DynamicSharpenEnabled > 0) + { + if (Sharpness < setSharpness) + output.r *= 1 + (12.0f * (setSharpness - Sharpness)); + else + output.g *= 1 + (12.0f * (Sharpness - setSharpness)); + } - Dest[DTid.xy] = output; + Dest[DTid.xy] = output; } )"; diff --git a/OptiScaler/rcas/precompile/RCAS_Shader.cso b/OptiScaler/rcas/precompile/RCAS_Shader.cso index bec1055eb53f5e8101e839091b4767f9fe36944d..ae322a6e8bf3bd0c72c238dd9ca8ca86529e7dd2 100644 GIT binary patch delta 3528 zcmds4eNYo;8sAMen@zF_8-lWYZwN%HU^fr}(W42WDO$8aZ4at*O^6~@p;4r#HZ>oF z01^a=wiv99VyU*Y2gS44&UyJdjrf(JYO!)2dPvhd+ak3y(Cd9{AUM7MIyX0SGxyG$ z%+B-vp6B^J&-?5z6WiiPWNcw+fr7aGeTMC*^p(?R_gUM;R~;Y#06Xymv9XK}HUOMH zu=Ly1Z7cv#0}Nn24FC#DR}=#j2BTo>D0_jzbw`K-z#981uoJY}zXA!c$Ihnx(lF15 zqh1oN>+Z5%db_uwO<&!$?@-5&_s;M&xV5Bliwgc|f9zs|C$V7iY|FwI$|n!pR{BU( zA?%gMq;-mreaBEgxy{FgP!W2*xQgUGzXVA0O0xZ#r`^6g{b09b$|4bSb z3!}O9YStQphO;E+Nz_VJFF_B|>^g3Xy$M>iWHXIMP|XZ2qp+0$8ADH@r8tTrp;pf< z>+*OEp!z?vHk$1JgrqSzW92SqRAn4^5{%po_>X|ZPS`jUL)}F&BgX)5GLz|X7Sk|+ zLG^uSSsvFmoM-7E8r^uHW6%5cxJ8`=dIi$xvXR1mq3~cm0b6xqq(TNu9e095cSf>P z=uv#H3%d&6Js?IZRd7n<;CN7stjD*NBJU+Pn)=c&-NH5qpe4EVSe0gnrm99@xqHiq z9adsqShx)t;QB1JE=b6|Y`hrtVn_Uu^|wYwAdOLsD5UaXpIro}fJOEqI3c>5itlpAt`yhR* znN-`qf$=zhHqn@9aVIv)KeK^{PW6#zGP_Tok$%GRIPF4a9H_DXg8J6k%a|MHDW37# zzRs{!SDVRQ=|dyq!ErI-wGT3d1`y58?ISq-GR|++oR0~3fPl}sf}X|eG}`{HH7i7m zYPvcjq38V*8y*afjZ=Nx|`-Hrt0ll_~mtpHE{_v}o9$VE)<3XXf z=D?!P*JgU&8M*TiZ#n% zzNTDgH$pDY`IeOMOY&T!l!b9~&LZZ!SFbLd`a{)vqjbZ$@1{QE^IZgwim04Gsr30b z06vwKYv0Zm=d5|^98VLkQ;rEdl8fPNU5)1Zal%F#g+;zRbTXC zQ3_14_W2wA!d@}5MYjrrEA2}o;-TX#57A#1@%#VzP#b>UP*ZQ7h5&%KC|wpnFQkWl z2IHuY^fGX;L^w|)yLD*&#Y5Gy82GwuDYgbmRV9jmjW+)E?k79{goB8g_@RYwB#`53 zQVE!eqB{4CkX~J!I3V@iw&*9H0JYf?f9#U7?QY$+_f8bL%W^Okd8WUecWoW~s^p-tx42fM1b0TWoWl z&y!$LBm}^W04*cn3H4fxxGOybYIr8ffa$wfuaamE^raf^N4e5 zjV?Dm1Q+=)nAaFv8T<4VtfMBjLf2E_bAd7pJ-#PUzZPedU=89@$BP}QCs#)80F`Jg z)g|>srjBInBI?!g=QY%p3IV0SqLykf_B{O@#_+IVM``^YLbA#tuOO8#eF1tHBOybq-d#{xAlZclwICdWs*CUP`VJZX3;t_%y z#;xES*40UINp2{oGNYoL3?Gzn9Jnp)F??JMYr{#-46v4@&4n7FEx7JP!ydbvkErT0 z!=d2CJMZzv)H6;7)G;vJw5)B;Ys|dh8yPR`b-4NH<2*sng2#D2nQC(PcHlv6rX+Bo zqTJbf%EC`t&l2UIk5uZ5KVnUH>=aB&SPRCq-c_y(@DXDxcPW_E*<{LB3h1x*h~XcG zUH%KOGC!L%OiG?>Z#6xQCH+l2-BAiXl#tFb?MA+D^K4DApSzlqV`f`0zGTu|6sBh4 z{tj;sx1e16q-C}mH1^ggCplbZMfOy3T5}jv>3wo2nOxdNpDrEcP4=nVS{XZpNu28j zTK<{&;OjlnJ~00#=N^#sSH^aV?x#Rf+^b-I_5+%Jo1ZZ?+{T&c6Go3}uMkN!@bqw& z|AKWd1^YV%`+k delta 3071 zcmds&eNYo;9>;gHo6RQVWs$cHfw18v1slB$MSN+C8weIDc%foTubDP06k{)VL9E4= zO0o$doS}fLHG*w}aF(971@T(Fb8G?`K}Dt3UeR(2l{$3JUa5G!cz4se4aT-NbN}3b zH}}l5v(NMF=lSmM_nUpbdx!KaP1IN97v%N*`G9+bzx~c7-MOT(TZte50OEv>#6*6* z2mtnUto$aULDI>>-h!#Ybr4S6tksZ7wBZa0tv8}74e>0 zlf2CMz4KA$Or2uGk>E_ihpp%^>B%o~WMeO0w%(2T4%>aPrhH%#+cue->Y{NGEjdel zmZUR?pQl`^v>L*M(`5AvY>1Z=_vpA|dy$~t+x(obxxv=Fl?sq7&gMc(urYgz&7MMZ z&(A8>V4nR~*`3fsMoMNDy4Dw)sQ~*x-X_3(03_-V+XXq0&zktlSGuYgGE?ESPY@W~G;l&V)NjG1 zPA_4ztvT6!Rcb~mEt48Ixr2_qJ zs@p!GId=s!#=towlxU#0(lvE4&cGELwto#aj9Ad)lA!ZNKRhiyYdaJB3vbeaXRb_6 z!gReFg>rPGL+o-S9n`Z%Bsrm1f-(r*j%+j`=kb1Gam?X|xlle~+Yu#*u9Q4?*=j$b&En66Jo95Ew&Doo3)WKd8s2Zm~p9(UXG2W8P%#uk4pJMPCUQg5? z3{9=)-#eetdStA1OEFfi8m=37knMW>mAbA)Sn24T@z&79t+O+S;KJnWNA|5eMjp*R zacKF`><_ZQCtTu-h3{GZ^6t7VM=V>4$2X)7*L9zBJQ%gL?vKH6+z_iTU*$I}LI_jd*3VtUJviF0cTx{&oWkrLfe`AJYSl6`|1@Mc^UhsrgVjr1w5InF|7J zhbU&14?PND#%JdZ?4yP6Shm-PkG_>V>R~HLg8tnKD!BFgRuBWR>%dO1X~7Hn{?EN2 z;Xipnod{s}O8)d;IKkV}G%4o+gcY%k%7N@n0Lo5Cmp^;|_LySPts2Ga(~oZz6&)+=P>5C)el=<~m13?g}l_6diu!B*Kv|0CaCW7r&N0sz)?Mi~P?sR{pRV!1144A@hq zileD3dyQWqduU36JppGJlxaYfC)!4!2e0EG$`B%HB}{Pl%!S3>ACYSShA46b?ma}( zfQ82)0g#3W0mkI(0FSxtxH&T0t846S2j!N?bie%=H?u}&Zv^h_(aE=^AqcmTIvJ=! zB11pe#0>@E)q%h=U%;FXc<>|uWdfffPj@3dLLE7Y_1ooR*>DNjNut9NyTTjLI7m1R zk#M{ECj%oVbqp7W+un$K)Ue;oU}KB05q#N3D?p&goQU$g0uIG~Qh! zIqud$HUifi^db9{m`-tw>kBVeqX7-5HPB|BR$PvEQsPK-t&GC#BRes1y!f_UO9B|| z5X4a`yp({Wq<1|y4xo)pU{KV9-HTuMiKrgKBAef3lHFidI67+(L$8~Mcw^bIF0zw? zLdEE|*TI#{G@7b9HH|h&-S0c8P4f11 zZ$=TaSS+rUMoj{F!_k3c^tuM>X@rNP^Oe|j&F~OB2#--MI@zvnH$=$JM3TMHFM6pz z>P1TM-js;zJwlM|B;X#QgG?&>r*5uQJrUrl?R0R}&KWn@lV`0?rH7f@i_K~r^YCfG z+eAuKF_;&hd3%3GJr_V=pfeg006Nk=*&V-*Zj9C26FNxYislQ=xKO zAoj97mU(uziR&Lb0lXArK6dId%SZ1sUn+Ofao1E7zZMhJV$DA?eNXxX5uK)#Q80d1 zWp1il(aiOqFcqThFJ0 ze@EDkiw`&3^QvXgtGATM-zy$z#J|<g^nNPp#T?>CZ@T=Wz-Fhqqf{ODFEz&haLaW_% zAai#lv}^efxU24kmUw)kMHR_Jy|g~R5smO2yWS+22!He71H9Mo7k}wao|+eB*5$?f zoei3LVF)jQ?`X?b@I&6r1H6Wk*mYoDu8r4V0r;T_Kr}ZHkWE!OQv4&xYFpbfN5hzW zrt%_@q6l)Bn@bAgk^;_*xQg;}i*CPDUF#RV@w~gww1RoykM>Ztyf=&7KHCziXpg@= zFr}HQ1XJI7ns;`Hr~IN)_sr-B^E+D`e;0S~`s~tzj$>;b$SQGZs#=n$wT3^HzTD8z WlFO+}))b(L;Loasi($@6x%Mwii8e9- diff --git a/OptiScaler/rcas/precompile/RCAS_Shader.h b/OptiScaler/rcas/precompile/RCAS_Shader.h index fc5104a4..d720bfce 100644 --- a/OptiScaler/rcas/precompile/RCAS_Shader.h +++ b/OptiScaler/rcas/precompile/RCAS_Shader.h @@ -1,11 +1,11 @@ #pragma once inline static const unsigned char rcas_cso[] = { - 0x44, 0x58, 0x42, 0x43, 0x3e, 0xa8, 0xeb, 0x9c, 0x88, 0xc7, 0x05, 0x76, - 0xf4, 0xd2, 0x41, 0xcb, 0x1c, 0xcc, 0xec, 0x1a, 0x01, 0x00, 0x00, 0x00, - 0x0c, 0x17, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x20, 0xdb, 0xf5, 0x2d, 0x8c, 0x9e, 0x34, 0x6f, + 0xb4, 0xb9, 0x8a, 0x86, 0x92, 0x26, 0xce, 0x9a, 0x01, 0x00, 0x00, 0x00, + 0x74, 0x18, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, - 0x24, 0x01, 0x00, 0x00, 0x78, 0x0a, 0x00, 0x00, 0x94, 0x0a, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x00, 0x98, 0x0a, 0x00, 0x00, 0xb4, 0x0a, 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, @@ -25,10 +25,10 @@ inline static const unsigned char rcas_cso[] = { 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, 0x4c, 0x09, 0x00, 0x00, - 0x60, 0x00, 0x05, 0x00, 0x53, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, - 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x34, 0x09, 0x00, 0x00, - 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x4a, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x53, 0x54, 0x41, 0x54, 0x6c, 0x09, 0x00, 0x00, + 0x60, 0x00, 0x05, 0x00, 0x5b, 0x02, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x54, 0x09, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x52, 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, @@ -41,51 +41,256 @@ inline static const unsigned char rcas_cso[] = { 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, 0x84, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x89, 0x20, 0x00, 0x00, 0x86, 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, 0xa4, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, + 0x0b, 0x84, 0xc4, 0x4c, 0x10, 0xac, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, 0x31, 0x03, 0x70, 0xd3, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xbf, 0x12, 0xd2, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0xa8, 0x30, 0x0c, 0xc3, 0x18, 0xe6, 0x08, 0x10, 0x42, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, 0x05, 0x49, 0x51, 0x8e, 0x41, 0x19, 0x86, 0x61, 0x18, 0x86, 0x81, 0x96, 0x42, 0x18, 0x83, 0x61, 0x50, 0x53, 0x06, 0x63, 0x30, 0xe8, 0x29, 0x0b, - 0x30, 0x28, 0xc3, 0x30, 0x18, 0x86, 0x61, 0x20, 0x14, 0x1d, 0x35, 0x5c, - 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0x73, 0x1b, 0x55, 0xac, 0xc4, 0xe4, 0x17, - 0xb7, 0x8d, 0x08, 0xc3, 0x30, 0x8c, 0x42, 0x4c, 0x83, 0x32, 0x10, 0x75, - 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, 0x6d, 0x54, 0xb1, 0x12, - 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, 0x0a, 0x61, 0x0d, 0xca, - 0x40, 0xd7, 0x1c, 0x41, 0x50, 0x0c, 0x65, 0x40, 0x86, 0x21, 0x23, 0x6d, - 0x20, 0x60, 0x18, 0x61, 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, 0x83, 0x39, 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, 0xcc, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0x20, - 0xa1, 0xf3, 0xe8, 0x1b, 0x46, 0x10, 0x8c, 0x99, 0xda, 0x60, 0x1c, 0xd8, - 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, - 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, - 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, - 0x21, 0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x40, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, - 0x40, 0x0f, 0xf4, 0xa0, 0x1d, 0xd2, 0x01, 0x1e, 0xe6, 0xe1, 0x17, 0xe8, - 0x21, 0x1f, 0xe0, 0xa1, 0x1c, 0x50, 0x30, 0xcc, 0x24, 0x06, 0xe3, 0xc0, - 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, 0x50, 0x0e, 0xf8, 0x40, - 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, 0xc0, 0x07, 0xf6, 0x50, - 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, 0x60, 0x0e, 0xec, 0xf0, - 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x72, 0xe0, 0x07, 0x60, 0xe0, - 0x07, 0x48, 0x08, 0x45, 0x1a, 0x67, 0x22, 0x83, 0x71, 0x60, 0x87, 0x70, - 0x98, 0x87, 0x79, 0x70, 0x03, 0x59, 0xb8, 0x05, 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, 0x83, 0x39, 0xf0, 0x03, 0x30, - 0xf0, 0x03, 0x14, 0x74, 0x54, 0x9e, 0x91, 0x02, 0x11, 0xc0, 0x48, 0x88, - 0x31, 0x86, 0x61, 0x30, 0x0c, 0xc3, 0x30, 0x8c, 0x61, 0xa0, 0x13, 0x00, + 0x30, 0x28, 0xc3, 0x30, 0x18, 0x86, 0x61, 0x20, 0x14, 0x15, 0xc4, 0x18, + 0x0c, 0xc3, 0x30, 0x0c, 0x83, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, + 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x61, + 0x18, 0x86, 0x51, 0x88, 0x6a, 0x50, 0x06, 0xb2, 0x8e, 0x1a, 0x2e, 0x7f, + 0xc2, 0x1e, 0x42, 0xf2, 0xb9, 0x8d, 0x2a, 0x56, 0x62, 0xf2, 0x91, 0xdb, + 0x46, 0xc4, 0x30, 0x0c, 0x43, 0x21, 0xb0, 0x41, 0x19, 0x28, 0x9b, 0x23, + 0x08, 0x8a, 0xa1, 0x0c, 0xc8, 0x30, 0x6c, 0xc4, 0x0d, 0x04, 0x0c, 0x23, + 0x0c, 0xc6, 0x4c, 0x6d, 0x30, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, + 0x6e, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e, + 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, + 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e, 0xf4, 0xc0, 0x06, + 0x60, 0x30, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0xa0, 0x07, 0x7a, 0xd0, 0x0e, + 0xe9, 0x00, 0x0f, 0xf3, 0xf0, 0x0b, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, + 0x28, 0x18, 0x66, 0x12, 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, 0x83, 0x39, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x24, 0x7c, 0x20, 0x85, + 0xc3, 0x08, 0x82, 0x31, 0x53, 0x1b, 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, 0xc8, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0xe8, 0x81, 0x1e, + 0xb4, 0x43, 0x3a, 0xc0, 0xc3, 0x3c, 0xfc, 0x02, 0x3d, 0xe4, 0x03, 0x3c, + 0x94, 0x03, 0x0a, 0x86, 0x99, 0xc4, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, + 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, + 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, + 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, + 0x81, 0x0d, 0xc0, 0x40, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x00, 0x09, 0x23, + 0x49, 0xe5, 0x4c, 0x64, 0x30, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, + 0x6e, 0x20, 0x0b, 0xb7, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50, 0x0f, + 0xf2, 0x50, 0x0e, 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30, 0x0e, + 0xf4, 0xf0, 0x0e, 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e, + 0xf4, 0xc0, 0x06, 0x60, 0x30, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0x80, 0x82, + 0x8f, 0xce, 0x33, 0x52, 0x20, 0x02, 0x18, 0x09, 0x31, 0xc6, 0x30, 0x0c, + 0x86, 0x61, 0x18, 0x86, 0x31, 0x0c, 0x94, 0x02, 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, 0x16, 0x20, 0x00, 0x04, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x04, 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, + 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x67, 0x02, + 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0x8f, + 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, + 0x9e, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x86, 0x3c, 0x1c, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x64, 0x81, 0x00, 0x13, 0x00, 0x00, 0x00, 0x32, 0x1e, 0x98, 0x18, + 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, 0xc6, 0x04, 0x43, 0x1a, + 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24, 0x0a, 0xac, 0x0c, 0xca, + 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4, 0x50, 0x0a, 0xa6, 0x70, 0x0a, + 0xa8, 0x90, 0x0a, 0xaa, 0xb0, 0xca, 0xa2, 0x18, 0x05, 0x4a, 0x78, 0xa0, + 0x14, 0x68, 0x1b, 0x01, 0xa8, 0x01, 0x12, 0x67, 0x00, 0xc8, 0x9c, 0x01, + 0x20, 0x74, 0x06, 0x80, 0xd2, 0x19, 0x00, 0x52, 0x67, 0x00, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, + 0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, + 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xa6, 0xc6, 0x25, 0xa6, 0x06, 0x04, + 0xc5, 0x8c, 0xec, 0xa6, 0xac, 0x86, 0x46, 0x6c, 0x8c, 0x2c, 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, 0x88, 0xc1, 0x18, 0xd0, 0x98, 0x7a, 0xab, 0x93, 0x1b, + 0x2b, 0x9b, 0x20, 0x0c, 0xcd, 0x04, 0x61, 0x70, 0x36, 0x08, 0x44, 0xb3, + 0x21, 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, 0x26, 0x08, 0x66, 0x40, + 0x06, 0x34, 0x9a, 0xde, 0xe8, 0xd2, 0xde, 0xdc, 0x36, 0x24, 0x03, 0x14, + 0x11, 0xc3, 0xc0, 0x10, 0xce, 0x06, 0xe1, 0x91, 0x26, 0x08, 0x68, 0x50, + 0x06, 0x24, 0x88, 0xca, 0xe6, 0xe8, 0x26, 0x08, 0x5b, 0x18, 0x6c, 0x58, + 0x08, 0xaa, 0x22, 0x88, 0x81, 0xb1, 0x2c, 0xcb, 0xd9, 0x10, 0x5c, 0x13, + 0x04, 0x35, 0x38, 0x03, 0x1a, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x13, + 0x84, 0xe1, 0xd9, 0x80, 0x10, 0x99, 0x46, 0x10, 0xc3, 0x06, 0x6c, 0x08, + 0xb8, 0x0d, 0xc4, 0x84, 0x75, 0xc0, 0x04, 0x21, 0x0d, 0xcc, 0x80, 0xc9, + 0x14, 0x5a, 0x98, 0x1c, 0x9c, 0x5b, 0xd9, 0xdc, 0xdc, 0x04, 0x61, 0x80, + 0x26, 0x08, 0x43, 0x34, 0x41, 0xd8, 0xc4, 0x60, 0x03, 0x82, 0x80, 0x41, + 0x18, 0x10, 0x62, 0xd0, 0x34, 0x63, 0xc0, 0x8a, 0x28, 0xcf, 0x2d, 0xac, + 0x2d, 0x6d, 0x6c, 0x0a, 0x2d, 0x4c, 0x0e, 0xae, 0xcc, 0xad, 0xc8, 0x2d, + 0x4c, 0x8c, 0xad, 0x8c, 0x6c, 0x82, 0x30, 0x48, 0x1b, 0x10, 0xa4, 0x0c, + 0xc2, 0xc0, 0x0c, 0xc4, 0xc0, 0x0c, 0x9a, 0x31, 0x60, 0x43, 0x94, 0x36, + 0x07, 0xc7, 0x16, 0x96, 0x37, 0x95, 0xa6, 0x57, 0xd6, 0x64, 0x35, 0x41, + 0x18, 0xa6, 0x0d, 0x08, 0x82, 0x06, 0x61, 0x90, 0x06, 0x62, 0x60, 0x06, + 0xcd, 0x18, 0xb0, 0x20, 0x2a, 0x13, 0xab, 0x3b, 0x9b, 0x20, 0x0c, 0xd4, + 0x06, 0x04, 0x59, 0x83, 0x30, 0x60, 0x03, 0x31, 0x30, 0x83, 0x66, 0x0c, + 0xf8, 0x34, 0xbd, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, 0xa1, 0x85, 0xc9, 0xc1, + 0xb9, 0x95, 0xcd, 0xcd, 0x4d, 0x10, 0x86, 0x6a, 0x03, 0x82, 0xb8, 0x41, + 0x18, 0xbc, 0x81, 0x18, 0x34, 0xcd, 0x18, 0x50, 0x6a, 0x7a, 0xa3, 0x4b, + 0x7b, 0x73, 0xa3, 0x2a, 0xc3, 0xa3, 0xab, 0x93, 0x2b, 0x9b, 0x1a, 0x0b, + 0x63, 0x2b, 0x9b, 0x20, 0x0c, 0xd6, 0x06, 0x04, 0x89, 0x83, 0x30, 0x90, + 0x03, 0x31, 0x68, 0x9a, 0x31, 0x20, 0xd2, 0x64, 0x37, 0x35, 0x16, 0xc6, + 0x56, 0x86, 0x35, 0x41, 0x18, 0xae, 0x0d, 0x08, 0x42, 0x07, 0x61, 0x50, + 0x07, 0x62, 0xd0, 0x34, 0x63, 0x40, 0xa4, 0xc9, 0x6e, 0x6a, 0x2c, 0x8c, + 0xad, 0x2c, 0x6b, 0x82, 0x30, 0x60, 0x1b, 0x10, 0xe4, 0x0e, 0xc2, 0x00, + 0x0f, 0xc4, 0xa0, 0x69, 0xc6, 0x80, 0x09, 0x15, 0x9a, 0x5c, 0xd9, 0x1c, + 0xda, 0x1b, 0x1b, 0xd9, 0x04, 0x61, 0xc8, 0x36, 0x20, 0x88, 0x1e, 0x84, + 0xc1, 0x1e, 0x88, 0x41, 0xd3, 0x8c, 0x01, 0x95, 0xa9, 0xb1, 0x30, 0xb6, + 0x32, 0xa6, 0xb4, 0xb6, 0x34, 0xba, 0x09, 0xc2, 0xa0, 0x6d, 0x40, 0x90, + 0x3e, 0x08, 0x03, 0x3f, 0x10, 0x83, 0xa6, 0x19, 0x03, 0x32, 0x44, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x57, 0x69, 0x64, 0x74, 0x68, 0x13, 0x84, + 0x61, 0xdb, 0x60, 0x20, 0xa0, 0x10, 0x06, 0xa1, 0x20, 0x06, 0x66, 0xc0, + 0x86, 0x28, 0x6d, 0x0e, 0x8e, 0x2d, 0x2c, 0x0f, 0xa9, 0x2c, 0xed, 0x0c, + 0x8d, 0x6e, 0x82, 0x30, 0x70, 0x1b, 0x0c, 0x64, 0x14, 0xc2, 0x80, 0x14, + 0xc4, 0xc0, 0x0c, 0x36, 0x34, 0x1b, 0x19, 0x9c, 0x81, 0x1a, 0xb4, 0x01, + 0x1c, 0xcc, 0x81, 0x1d, 0xe4, 0x01, 0x1f, 0xfc, 0x81, 0x28, 0x94, 0xc2, + 0x86, 0x81, 0xf8, 0x4c, 0x61, 0x82, 0x20, 0x00, 0x1b, 0x80, 0x0d, 0x03, + 0x91, 0x0a, 0xa9, 0xb0, 0x21, 0x50, 0x85, 0x0d, 0xc3, 0x80, 0x0a, 0xab, + 0x40, 0x63, 0x68, 0xaa, 0x29, 0x2c, 0xcd, 0x6d, 0xc3, 0xb0, 0x07, 0x7b, + 0x30, 0x6c, 0x10, 0xcc, 0xc0, 0x15, 0x36, 0x14, 0xa8, 0xd0, 0x0a, 0x80, + 0xf7, 0x0a, 0x44, 0xc4, 0xe4, 0xc2, 0xdc, 0xc6, 0xd0, 0xca, 0xe6, 0x26, + 0x08, 0x43, 0x47, 0xc3, 0x8c, 0xed, 0x2d, 0x8c, 0x6e, 0x6e, 0x82, 0x30, + 0x78, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x26, 0x08, 0xc3, 0x47, 0x22, + 0xcd, 0x8d, 0x6e, 0x8e, 0x08, 0x5d, 0x19, 0xde, 0x17, 0xdb, 0x5b, 0x18, + 0x19, 0x13, 0xba, 0x32, 0xbc, 0xaf, 0x39, 0xba, 0x37, 0xb9, 0x32, 0x16, + 0x75, 0x69, 0x6e, 0x74, 0x73, 0x13, 0x84, 0x01, 0x0c, 0x36, 0x38, 0xb1, + 0x20, 0x0b, 0xb3, 0x40, 0x0b, 0xb5, 0x60, 0x0b, 0xb7, 0x20, 0x06, 0xb8, + 0x20, 0x06, 0xb9, 0xc0, 0xe8, 0xc2, 0x2e, 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, 0x74, 0x95, 0xc8, 0xf0, + 0x5c, 0xe8, 0xf2, 0xe0, 0xca, 0x82, 0xdc, 0xdc, 0xde, 0xe8, 0xc2, 0xe8, + 0xd2, 0xde, 0xdc, 0xe6, 0xa6, 0x08, 0xa6, 0xb0, 0x0a, 0x75, 0xc8, 0xf0, + 0x5c, 0xca, 0xdc, 0xe8, 0xe4, 0xf2, 0xa0, 0xde, 0xd2, 0xdc, 0xe8, 0xe6, + 0xa6, 0x04, 0xaf, 0xd0, 0x85, 0x0c, 0xcf, 0x65, 0xec, 0xad, 0xce, 0x8d, + 0xae, 0x4c, 0x6e, 0x6e, 0x4a, 0xb0, 0x0b, 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, 0x29, 0x00, 0x00, 0x00, + 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x0d, 0x40, 0xc3, 0xe5, 0x3b, + 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x76, 0xb0, 0x0d, + 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, + 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x08, 0xdb, 0x70, 0xf9, + 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, + 0x06, 0x20, 0x60, 0x3e, 0x72, 0xdb, 0x96, 0x20, 0x0d, 0x97, 0xef, 0x3c, + 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x19, 0x38, + 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x38, 0xd3, 0xed, 0x17, 0xb7, 0x6d, 0x02, + 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0x51, 0x3a, + 0xc0, 0xe0, 0x17, 0xb7, 0x6d, 0x05, 0xd6, 0x70, 0xf9, 0xce, 0xe3, 0x4f, + 0xc4, 0x35, 0x51, 0x11, 0xc1, 0x4e, 0x4e, 0x44, 0xf8, 0xc5, 0x6d, 0x5b, + 0x80, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0xd3, 0x11, 0x11, 0xc0, 0x20, 0x0e, + 0x3e, 0x72, 0xdb, 0x46, 0xf0, 0x0c, 0x97, 0xef, 0x3c, 0x3e, 0xd5, 0x00, + 0x11, 0xe6, 0x17, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x09, 0xc1, 0x49, 0x13, 0xc2, 0xf5, 0x4f, 0xc8, 0xd0, 0x7b, 0xd6, + 0x75, 0x0b, 0x45, 0x95, 0x44, 0x58, 0x49, 0x4c, 0xb8, 0x0d, 0x00, 0x00, + 0x60, 0x00, 0x05, 0x00, 0x6e, 0x03, 0x00, 0x00, 0x44, 0x58, 0x49, 0x4c, + 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xa0, 0x0d, 0x00, 0x00, + 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, 0x65, 0x03, 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, 0x87, 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, 0xb0, 0xc1, 0x08, 0x40, 0x09, 0x00, 0x0a, + 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, 0x31, 0x03, 0x70, 0xd3, + 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xbf, 0x12, 0xd2, 0x4a, 0x4c, 0x7e, + 0x71, 0xdb, 0xa8, 0x30, 0x0c, 0xc3, 0x18, 0xe6, 0x08, 0x10, 0x42, 0xee, + 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, 0xa0, 0x19, 0x16, 0x02, + 0x05, 0x49, 0x51, 0x8e, 0x41, 0x19, 0x86, 0x61, 0x18, 0x86, 0x81, 0x96, + 0x42, 0x18, 0x83, 0x61, 0x50, 0x53, 0x06, 0x63, 0x30, 0xe8, 0x29, 0x0b, + 0x30, 0x28, 0xc3, 0x30, 0x18, 0x86, 0x61, 0x20, 0x14, 0x15, 0xc4, 0x18, + 0x0c, 0xc3, 0x30, 0x0c, 0x83, 0xa6, 0xa3, 0x86, 0xcb, 0x9f, 0xb0, 0x87, + 0x90, 0x7c, 0x6e, 0xa3, 0x8a, 0x95, 0x98, 0xfc, 0xe2, 0xb6, 0x11, 0x61, + 0x18, 0x86, 0x51, 0x88, 0x6a, 0x50, 0x06, 0xb2, 0x8e, 0x1a, 0x2e, 0x7f, + 0xc2, 0x1e, 0x42, 0xf2, 0xb9, 0x8d, 0x2a, 0x56, 0x62, 0xf2, 0x91, 0xdb, + 0x46, 0xc4, 0x30, 0x0c, 0x43, 0x21, 0xb0, 0x41, 0x19, 0x28, 0x9b, 0x23, + 0x08, 0x8a, 0xa1, 0x0c, 0xc8, 0x30, 0x6c, 0xc4, 0x0d, 0x04, 0x0c, 0x23, + 0x0c, 0xc6, 0x4c, 0x6d, 0x30, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, + 0x6e, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50, 0x0f, 0xf2, 0x50, 0x0e, + 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30, 0x0e, 0xf4, 0xf0, 0x0e, + 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e, 0xf4, 0xc0, 0x06, + 0x60, 0x30, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0xa0, 0x07, 0x7a, 0xd0, 0x0e, + 0xe9, 0x00, 0x0f, 0xf3, 0xf0, 0x0b, 0xf4, 0x90, 0x0f, 0xf0, 0x50, 0x0e, + 0x28, 0x18, 0x66, 0x12, 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, 0x83, 0x39, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x24, 0x7c, 0x20, 0x85, + 0xc3, 0x08, 0x82, 0x31, 0x53, 0x1b, 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, 0xc8, 0x81, 0x1f, 0x80, 0x81, 0x1f, 0xe8, 0x81, 0x1e, + 0xb4, 0x43, 0x3a, 0xc0, 0xc3, 0x3c, 0xfc, 0x02, 0x3d, 0xe4, 0x03, 0x3c, + 0x94, 0x03, 0x0a, 0x86, 0x99, 0xc4, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, + 0x61, 0x1e, 0xdc, 0x80, 0x16, 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, + 0xa1, 0x1c, 0xe4, 0x80, 0x14, 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, + 0xe1, 0x1d, 0xe4, 0x81, 0x0f, 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, + 0x81, 0x0d, 0xc0, 0x40, 0x0e, 0xfc, 0x00, 0x0c, 0xfc, 0x00, 0x09, 0x23, + 0x49, 0xe5, 0x4c, 0x64, 0x30, 0x0e, 0xec, 0x10, 0x0e, 0xf3, 0x30, 0x0f, + 0x6e, 0x20, 0x0b, 0xb7, 0x40, 0x0b, 0xe5, 0x80, 0x0f, 0xf4, 0x50, 0x0f, + 0xf2, 0x50, 0x0e, 0x72, 0x40, 0x0a, 0x7c, 0x60, 0x0f, 0xe5, 0x30, 0x0e, + 0xf4, 0xf0, 0x0e, 0xf2, 0xc0, 0x07, 0xe6, 0xc0, 0x0e, 0xef, 0x10, 0x0e, + 0xf4, 0xc0, 0x06, 0x60, 0x30, 0x07, 0x7e, 0x00, 0x06, 0x7e, 0x80, 0x82, + 0x8f, 0xce, 0x33, 0x52, 0x20, 0x02, 0x18, 0x09, 0x31, 0xc6, 0x30, 0x0c, + 0x86, 0x61, 0x18, 0x86, 0x31, 0x0c, 0x94, 0x4e, 0x01, 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, @@ -97,92 +302,46 @@ inline static const unsigned char rcas_cso[] = { 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, + 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, 0x16, 0x20, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x04, 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, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xc0, 0x90, 0x87, 0x02, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x21, 0xcf, 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x43, 0x1e, 0x0d, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb2, 0x40, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, - 0x32, 0x1e, 0x98, 0x18, 0x19, 0x11, 0x4c, 0x90, 0x8c, 0x09, 0x26, 0x47, - 0xc6, 0x04, 0x43, 0x1a, 0x4a, 0x60, 0x04, 0xa0, 0x18, 0x8a, 0xa0, 0x24, - 0x0a, 0xac, 0x0c, 0xca, 0xa1, 0x10, 0x0a, 0xa2, 0x30, 0x0a, 0xa4, 0x50, - 0x0a, 0xa6, 0x70, 0x0a, 0xa8, 0x90, 0x0a, 0xaa, 0xb0, 0xca, 0xa2, 0xac, - 0x03, 0x8a, 0x71, 0xa0, 0x14, 0x28, 0x1b, 0x01, 0xa8, 0x01, 0x02, 0x67, - 0x00, 0x88, 0x9c, 0x01, 0x20, 0x73, 0x06, 0x80, 0xce, 0x19, 0x00, 0x42, - 0x67, 0x00, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, - 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xa6, 0xc6, - 0x25, 0xa6, 0x06, 0x04, 0xc5, 0x8c, 0xec, 0xa6, 0xac, 0x86, 0x46, 0x6c, - 0x8c, 0x2c, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x86, 0x64, 0x82, 0x30, 0x28, - 0x1b, 0x84, 0x81, 0xd8, 0x20, 0x10, 0x04, 0x85, 0xb1, 0xb9, 0x09, 0xc2, - 0xb0, 0x6c, 0x18, 0x0e, 0x84, 0x98, 0x20, 0x80, 0x81, 0x18, 0xd0, 0x98, - 0x7a, 0xab, 0x93, 0x1b, 0x2b, 0x9b, 0x20, 0x0c, 0xcc, 0x04, 0x61, 0x68, - 0x36, 0x08, 0x44, 0xb3, 0x21, 0x21, 0x94, 0x85, 0x20, 0x06, 0x86, 0x70, - 0x26, 0x08, 0x64, 0x30, 0x06, 0x34, 0x9a, 0xde, 0xe8, 0xd2, 0xde, 0xdc, - 0x36, 0x24, 0x03, 0x14, 0x11, 0xc3, 0xc0, 0x10, 0xce, 0x06, 0xe1, 0x91, - 0x26, 0x08, 0x66, 0x40, 0x06, 0x24, 0x88, 0xca, 0xe6, 0xe8, 0x26, 0x08, - 0x19, 0x18, 0x6c, 0x58, 0x08, 0xaa, 0x22, 0x88, 0x81, 0xb1, 0x2c, 0xcb, - 0xd9, 0x10, 0x5c, 0x13, 0x04, 0x34, 0x30, 0x03, 0x1a, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x13, 0x84, 0xc1, 0xd9, 0x80, 0x10, 0x99, 0x46, 0x10, - 0xc3, 0x06, 0x6c, 0x08, 0xb8, 0x0d, 0xc4, 0x84, 0x75, 0xc0, 0x04, 0xe1, - 0x0c, 0xca, 0x80, 0xc9, 0x14, 0x5a, 0x98, 0x1c, 0x9c, 0x5b, 0xd9, 0xdc, - 0xdc, 0x04, 0x61, 0x78, 0x26, 0x08, 0x03, 0x34, 0x41, 0xc8, 0xc2, 0x60, - 0x03, 0x82, 0x80, 0x41, 0x18, 0x10, 0x62, 0xd0, 0x34, 0x63, 0xc0, 0x8a, - 0x28, 0xcf, 0x2d, 0xac, 0x2d, 0x6d, 0x6c, 0x0a, 0x2d, 0x4c, 0x0e, 0xae, - 0xcc, 0xad, 0xc8, 0x2d, 0x4c, 0x8c, 0xad, 0x8c, 0x6c, 0x82, 0x30, 0x44, - 0x1b, 0x10, 0xa4, 0x0c, 0xc2, 0xc0, 0x0c, 0xc4, 0xc0, 0x0c, 0x9a, 0x31, - 0x60, 0x43, 0x94, 0x36, 0x07, 0xc7, 0x16, 0x96, 0x37, 0x95, 0xa6, 0x57, - 0xd6, 0x64, 0x35, 0x41, 0x18, 0xa4, 0x0d, 0x08, 0x82, 0x06, 0x61, 0x90, - 0x06, 0x62, 0x60, 0x06, 0xcd, 0x18, 0xb0, 0x20, 0x2a, 0x13, 0xab, 0x3b, - 0x9b, 0x20, 0x0c, 0xd3, 0x06, 0x04, 0x59, 0x83, 0x30, 0x60, 0x03, 0x31, - 0x30, 0x83, 0x66, 0x0c, 0xf8, 0x34, 0xbd, 0xd1, 0xa5, 0xbd, 0xb9, 0x4d, - 0xa1, 0x85, 0xc9, 0xc1, 0xb9, 0x95, 0xcd, 0xcd, 0x4d, 0x10, 0x06, 0x6a, - 0x03, 0x82, 0xb8, 0x41, 0x18, 0xbc, 0x81, 0x18, 0x34, 0xcd, 0x18, 0x50, - 0x6a, 0x7a, 0xa3, 0x4b, 0x7b, 0x73, 0xa3, 0x2a, 0xc3, 0xa3, 0xab, 0x93, - 0x2b, 0x9b, 0x1a, 0x0b, 0x63, 0x2b, 0x9b, 0x20, 0x0c, 0xd5, 0x06, 0x04, - 0x89, 0x83, 0x30, 0x90, 0x03, 0x31, 0x68, 0x9a, 0x31, 0x20, 0xd2, 0x64, - 0x37, 0x35, 0x16, 0xc6, 0x56, 0x86, 0x35, 0x41, 0x18, 0xac, 0x0d, 0x08, - 0x42, 0x07, 0x61, 0x50, 0x07, 0x62, 0xd0, 0x34, 0x63, 0x40, 0xa4, 0xc9, - 0x6e, 0x6a, 0x2c, 0x8c, 0xad, 0x2c, 0x6b, 0x82, 0x30, 0x5c, 0x1b, 0x10, - 0xe4, 0x0e, 0xc2, 0x00, 0x0f, 0xc4, 0xa0, 0x69, 0xc6, 0x80, 0x09, 0x15, - 0x9a, 0x5c, 0xd9, 0x1c, 0xda, 0x1b, 0x1b, 0xd9, 0x04, 0x61, 0xc0, 0x36, - 0x20, 0x88, 0x1e, 0x84, 0xc1, 0x1e, 0x88, 0x41, 0xd3, 0x8c, 0x01, 0x95, - 0xa9, 0xb1, 0x30, 0xb6, 0x32, 0xa6, 0xb4, 0xb6, 0x34, 0xba, 0x09, 0xc2, - 0x90, 0x6d, 0x40, 0x90, 0x3e, 0x08, 0x03, 0x3f, 0x10, 0x83, 0xa6, 0x19, - 0x03, 0x32, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x57, 0x69, 0x64, - 0x74, 0x68, 0x13, 0x84, 0x41, 0xdb, 0x60, 0x20, 0xa0, 0x10, 0x06, 0xa1, - 0x20, 0x06, 0x66, 0xc0, 0x86, 0x28, 0x6d, 0x0e, 0x8e, 0x2d, 0x2c, 0x0f, - 0xa9, 0x2c, 0xed, 0x0c, 0x8d, 0x6e, 0x82, 0x30, 0x6c, 0x1b, 0x0c, 0x64, - 0x14, 0xc2, 0x80, 0x14, 0xc4, 0xc0, 0x0c, 0x36, 0x34, 0x1b, 0x19, 0x9c, - 0x81, 0x1a, 0xb4, 0x01, 0x1c, 0xcc, 0x81, 0x1d, 0xe4, 0x01, 0x1f, 0xfc, - 0x81, 0x28, 0x94, 0xc2, 0x86, 0x81, 0xf8, 0x4c, 0x61, 0x82, 0x20, 0x00, - 0x1b, 0x80, 0x0d, 0x03, 0x91, 0x0a, 0xa9, 0xb0, 0x21, 0x50, 0x85, 0x0d, - 0xc3, 0x80, 0x0a, 0xab, 0x40, 0x63, 0x68, 0xaa, 0x29, 0x2c, 0xcd, 0x6d, - 0xc3, 0xb0, 0x07, 0x7b, 0x30, 0x6c, 0x10, 0xcc, 0xc0, 0x15, 0x36, 0x14, - 0xa8, 0xd0, 0x0a, 0x80, 0xf7, 0x0a, 0x44, 0xc4, 0xe4, 0xc2, 0xdc, 0xc6, - 0xd0, 0xca, 0xe6, 0x26, 0x08, 0x03, 0x47, 0xc3, 0x8c, 0xed, 0x2d, 0x8c, - 0x6e, 0x6e, 0x82, 0x30, 0x74, 0x2c, 0xd2, 0xdc, 0xe6, 0xe8, 0xe6, 0x26, - 0x08, 0x83, 0x47, 0x22, 0xcd, 0x8d, 0x6e, 0x8e, 0x08, 0x5d, 0x19, 0xde, - 0x17, 0xdb, 0x5b, 0x18, 0x19, 0x13, 0xba, 0x32, 0xbc, 0xaf, 0x39, 0xba, - 0x37, 0xb9, 0x32, 0x16, 0x75, 0x69, 0x6e, 0x74, 0x73, 0x13, 0x84, 0xe1, - 0xdb, 0xe0, 0xc4, 0x82, 0x2c, 0xcc, 0x02, 0x2d, 0xd4, 0x82, 0x2d, 0xdc, - 0x82, 0x18, 0xe0, 0x82, 0x18, 0xe4, 0x02, 0xa3, 0x0b, 0xbb, 0x50, 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, 0x45, 0x1d, 0x32, 0x3c, 0x97, 0x39, 0xb4, 0x30, 0xb2, 0x32, - 0xb9, 0xa6, 0x37, 0xb2, 0x32, 0xb6, 0x29, 0x01, 0x52, 0x86, 0x0c, 0xcf, - 0x45, 0xae, 0x6c, 0xee, 0xad, 0x4e, 0x6e, 0xac, 0x6c, 0x6e, 0x4a, 0xd0, - 0x55, 0x22, 0xc3, 0x73, 0xa1, 0xcb, 0x83, 0x2b, 0x0b, 0x72, 0x73, 0x7b, - 0xa3, 0x0b, 0xa3, 0x4b, 0x7b, 0x73, 0x9b, 0x9b, 0x22, 0x98, 0xc2, 0x2a, - 0xd4, 0x21, 0xc3, 0x73, 0x29, 0x73, 0xa3, 0x93, 0xcb, 0x83, 0x7a, 0x4b, - 0x73, 0xa3, 0x9b, 0x9b, 0x12, 0xbc, 0x42, 0x17, 0x32, 0x3c, 0x97, 0xb1, - 0xb7, 0x3a, 0x37, 0xba, 0x32, 0xb9, 0xb9, 0x29, 0xc1, 0x2e, 0x00, 0x00, + 0xc0, 0x90, 0x67, 0x02, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x21, 0x8f, 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x43, 0x9e, 0x0c, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x86, 0x3c, 0x1c, 0x10, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x81, 0x00, 0x0c, 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, 0xc0, 0x0a, 0xa1, 0x80, 0x68, 0x1b, 0x01, 0x20, 0x71, 0x06, + 0x80, 0xcc, 0x19, 0x00, 0x42, 0x67, 0x00, 0x48, 0x9d, 0x01, 0x00, 0x00, + 0x79, 0x18, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, + 0x46, 0x02, 0x13, 0x44, 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, + 0xc6, 0x05, 0xc7, 0x45, 0x86, 0x06, 0xa6, 0xc6, 0x25, 0xa6, 0x06, 0x04, + 0xc5, 0x8c, 0xec, 0xa6, 0xac, 0x86, 0x46, 0x6c, 0x8c, 0x2c, 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, 0x41, 0x0c, 0x28, 0x02, 0x13, 0x84, + 0xc1, 0x99, 0x20, 0x0c, 0xcf, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, + 0x10, 0xc4, 0xd0, 0x10, 0xcf, 0x04, 0xc1, 0x0c, 0xaa, 0x0d, 0xc9, 0x10, + 0x31, 0xc4, 0x30, 0x34, 0xc4, 0xb3, 0x41, 0x80, 0xa4, 0x09, 0x02, 0x1a, + 0x58, 0x13, 0x84, 0x6d, 0xda, 0xb0, 0x10, 0x14, 0x43, 0x10, 0x43, 0x53, + 0x55, 0xd5, 0xb3, 0x21, 0xb0, 0x26, 0x08, 0x6a, 0x70, 0x4d, 0x10, 0x06, + 0x68, 0x03, 0x42, 0x60, 0x0c, 0x41, 0x0c, 0x19, 0xb0, 0x21, 0xd0, 0x36, + 0x10, 0xd3, 0xb5, 0x01, 0x13, 0x04, 0x01, 0xa0, 0x31, 0x34, 0xd5, 0x14, + 0x96, 0xe6, 0x36, 0x41, 0x18, 0xa2, 0x09, 0xc2, 0x20, 0x6d, 0x18, 0xc0, + 0x00, 0x0c, 0x86, 0x0d, 0xc2, 0x17, 0x06, 0x1b, 0x8a, 0xce, 0x03, 0x38, + 0x31, 0xa8, 0xc2, 0xc6, 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, + 0x37, 0x25, 0x08, 0xaa, 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, + 0xbd, 0xb9, 0x4d, 0x09, 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, + 0x76, 0x65, 0x72, 0x53, 0x02, 0xa3, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, + 0x18, 0x59, 0x99, 0x5c, 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x20, 0x29, + 0x43, 0x86, 0xe7, 0x22, 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, + 0x37, 0x25, 0xd8, 0xea, 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, + 0x41, 0xbd, 0xa5, 0xb9, 0xd1, 0xcd, 0x4d, 0x09, 0xc4, 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, @@ -211,286 +370,157 @@ inline static const unsigned char rcas_cso[] = { 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, - 0x26, 0x00, 0x00, 0x00, 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x0d, + 0x29, 0x00, 0x00, 0x00, 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x0d, 0x40, 0xc3, 0xe5, 0x3b, 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, - 0xdb, 0x66, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, + 0xdb, 0x76, 0xb0, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, - 0x07, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, - 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x3e, 0x72, 0xdb, 0x86, 0x20, + 0x08, 0xdb, 0x70, 0xf9, 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, + 0x3a, 0xc0, 0x50, 0x12, 0x06, 0x20, 0x60, 0x3e, 0x72, 0xdb, 0x96, 0x20, 0x0d, 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, - 0x2c, 0x84, 0x09, 0x54, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd7, 0x44, - 0x45, 0x44, 0xe9, 0x00, 0x83, 0x5f, 0xdc, 0xb6, 0x15, 0x58, 0xc3, 0xe5, - 0x3b, 0x8f, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0x04, 0x3b, 0x39, 0x11, 0xe1, - 0x17, 0xb7, 0x6d, 0x01, 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0x47, 0x44, - 0x00, 0x83, 0x38, 0xf8, 0xc8, 0x6d, 0x1b, 0xc1, 0x33, 0x5c, 0xbe, 0xf3, - 0xf8, 0x54, 0x03, 0x44, 0x98, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x48, 0x41, 0x53, 0x48, 0x14, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa0, 0x08, 0xb2, 0x03, 0x10, 0x5c, 0x5e, 0xf3, - 0x50, 0x93, 0x3d, 0x45, 0xa9, 0x6c, 0x76, 0x78, 0x44, 0x58, 0x49, 0x4c, - 0x70, 0x0c, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0x1c, 0x03, 0x00, 0x00, - 0x44, 0x58, 0x49, 0x4c, 0x00, 0x01, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, - 0x58, 0x0c, 0x00, 0x00, 0x42, 0x43, 0xc0, 0xde, 0x21, 0x0c, 0x00, 0x00, - 0x13, 0x03, 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, - 0x85, 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, 0xa8, 0xc1, 0x08, - 0x40, 0x09, 0x00, 0x0a, 0xe6, 0x08, 0xc0, 0xa0, 0x0c, 0xc3, 0x30, 0x10, - 0x31, 0x03, 0x70, 0xd3, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xbf, 0x12, - 0xd2, 0x4a, 0x4c, 0x7e, 0x71, 0xdb, 0xa8, 0x30, 0x0c, 0xc3, 0x18, 0xe6, - 0x08, 0x10, 0x42, 0xee, 0x19, 0x2e, 0x7f, 0xc2, 0x1e, 0x42, 0xf2, 0x43, - 0xa0, 0x19, 0x16, 0x02, 0x05, 0x49, 0x51, 0x8e, 0x41, 0x19, 0x86, 0x61, - 0x18, 0x86, 0x81, 0x96, 0x42, 0x18, 0x83, 0x61, 0x50, 0x53, 0x06, 0x63, - 0x30, 0xe8, 0x29, 0x0b, 0x30, 0x28, 0xc3, 0x30, 0x18, 0x86, 0x61, 0x20, - 0x14, 0x1d, 0x35, 0x5c, 0xfe, 0x84, 0x3d, 0x84, 0xe4, 0x73, 0x1b, 0x55, - 0xac, 0xc4, 0xe4, 0x17, 0xb7, 0x8d, 0x08, 0xc3, 0x30, 0x8c, 0x42, 0x4c, - 0x83, 0x32, 0x10, 0x75, 0xd4, 0x70, 0xf9, 0x13, 0xf6, 0x10, 0x92, 0xcf, - 0x6d, 0x54, 0xb1, 0x12, 0x93, 0x8f, 0xdc, 0x36, 0x22, 0x86, 0x61, 0x18, - 0x0a, 0x61, 0x0d, 0xca, 0x40, 0xd7, 0x1c, 0x41, 0x50, 0x0c, 0x65, 0x40, - 0x86, 0x21, 0x23, 0x6d, 0x20, 0x60, 0x18, 0x61, 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, 0x83, 0x39, 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, 0xcc, 0x81, 0x1f, - 0x80, 0x81, 0x1f, 0x20, 0xa1, 0xf3, 0xe8, 0x1b, 0x46, 0x10, 0x8c, 0x99, - 0xda, 0x60, 0x1c, 0xd8, 0x21, 0x1c, 0xe6, 0x61, 0x1e, 0xdc, 0x80, 0x16, - 0xca, 0x01, 0x1f, 0xe8, 0xa1, 0x1e, 0xe4, 0xa1, 0x1c, 0xe4, 0x80, 0x14, - 0xf8, 0xc0, 0x1e, 0xca, 0x61, 0x1c, 0xe8, 0xe1, 0x1d, 0xe4, 0x81, 0x0f, - 0xcc, 0x81, 0x1d, 0xde, 0x21, 0x1c, 0xe8, 0x81, 0x0d, 0xc0, 0x40, 0x0e, - 0xfc, 0x00, 0x0c, 0xfc, 0x40, 0x0f, 0xf4, 0xa0, 0x1d, 0xd2, 0x01, 0x1e, - 0xe6, 0xe1, 0x17, 0xe8, 0x21, 0x1f, 0xe0, 0xa1, 0x1c, 0x50, 0x30, 0xcc, - 0x24, 0x06, 0xe3, 0xc0, 0x0e, 0xe1, 0x30, 0x0f, 0xf3, 0xe0, 0x06, 0xb4, - 0x50, 0x0e, 0xf8, 0x40, 0x0f, 0xf5, 0x20, 0x0f, 0xe5, 0x20, 0x07, 0xa4, - 0xc0, 0x07, 0xf6, 0x50, 0x0e, 0xe3, 0x40, 0x0f, 0xef, 0x20, 0x0f, 0x7c, - 0x60, 0x0e, 0xec, 0xf0, 0x0e, 0xe1, 0x40, 0x0f, 0x6c, 0x00, 0x06, 0x72, - 0xe0, 0x07, 0x60, 0xe0, 0x07, 0x48, 0x08, 0x45, 0x1a, 0x67, 0x22, 0x83, - 0x71, 0x60, 0x87, 0x70, 0x98, 0x87, 0x79, 0x70, 0x03, 0x59, 0xb8, 0x05, - 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, 0x83, - 0x39, 0xf0, 0x03, 0x30, 0xf0, 0x03, 0x14, 0x74, 0x54, 0x9e, 0x91, 0x02, - 0x11, 0xc0, 0x48, 0x88, 0x31, 0x86, 0x61, 0x30, 0x0c, 0xc3, 0x30, 0x8c, - 0x61, 0xa0, 0x73, 0x0a, 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, 0x16, 0x20, 0x00, 0x04, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xf2, 0x34, 0x40, 0x00, 0x04, 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, - 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x90, 0x87, 0x02, - 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x21, 0xcf, - 0x05, 0x04, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, - 0x1e, 0x0d, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xb2, 0x40, 0x00, 0x00, 0x0c, 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, 0xc0, 0x0a, - 0xa1, 0x80, 0x28, 0x1b, 0x01, 0x20, 0x70, 0x06, 0x80, 0xc8, 0x19, 0x00, - 0x32, 0x67, 0x00, 0x08, 0x9d, 0x01, 0x00, 0x00, 0x79, 0x18, 0x00, 0x00, - 0x46, 0x00, 0x00, 0x00, 0x1a, 0x03, 0x4c, 0x90, 0x46, 0x02, 0x13, 0x44, - 0x8f, 0x0c, 0x6f, 0xec, 0xed, 0x4d, 0x0c, 0x24, 0xc6, 0x05, 0xc7, 0x45, - 0x86, 0x06, 0xa6, 0xc6, 0x25, 0xa6, 0x06, 0x04, 0xc5, 0x8c, 0xec, 0xa6, - 0xac, 0x86, 0x46, 0x6c, 0x8c, 0x2c, 0x65, 0x43, 0x10, 0x4c, 0x10, 0x86, - 0x64, 0x82, 0x30, 0x28, 0x1b, 0x84, 0x81, 0x98, 0x20, 0x0c, 0xcb, 0x06, - 0x61, 0x30, 0x28, 0x8c, 0xcd, 0x4d, 0x10, 0x06, 0x66, 0xc3, 0x80, 0x24, - 0xc4, 0x04, 0x01, 0x0c, 0x26, 0x02, 0x13, 0x84, 0xa1, 0x99, 0x20, 0x0c, - 0xce, 0x06, 0x81, 0x70, 0x36, 0x24, 0xc4, 0xc2, 0x10, 0xc4, 0xd0, 0x10, - 0xcf, 0x04, 0x81, 0x0c, 0xa8, 0x0d, 0xc9, 0x10, 0x31, 0xc4, 0x30, 0x34, - 0xc4, 0xb3, 0x41, 0x80, 0xa4, 0x09, 0x82, 0x19, 0x54, 0x13, 0x84, 0x4c, - 0xda, 0xb0, 0x10, 0x14, 0x43, 0x10, 0x43, 0x53, 0x55, 0xd5, 0xb3, 0x21, - 0xb0, 0x26, 0x08, 0x68, 0x60, 0x4d, 0x10, 0x86, 0x67, 0x03, 0x42, 0x60, - 0x0c, 0x41, 0x0c, 0x19, 0xb0, 0x21, 0xd0, 0x36, 0x10, 0xd3, 0xb5, 0x01, - 0x13, 0x04, 0x01, 0xa0, 0x31, 0x34, 0xd5, 0x14, 0x96, 0xe6, 0x36, 0x41, - 0x18, 0xa0, 0x09, 0xc2, 0x10, 0x6d, 0x18, 0xc0, 0x00, 0x0c, 0x86, 0x0d, - 0xc2, 0x17, 0x06, 0x1b, 0x8a, 0xce, 0x03, 0x38, 0x31, 0xa8, 0xc2, 0xc6, - 0x66, 0xd7, 0xe6, 0x92, 0x46, 0x56, 0xe6, 0x46, 0x37, 0x25, 0x08, 0xaa, - 0x90, 0xe1, 0xb9, 0xd8, 0x95, 0xc9, 0xcd, 0xa5, 0xbd, 0xb9, 0x4d, 0x09, - 0x88, 0x26, 0x64, 0x78, 0x2e, 0x76, 0x61, 0x6c, 0x76, 0x65, 0x72, 0x53, - 0x02, 0xa3, 0x0e, 0x19, 0x9e, 0xcb, 0x1c, 0x5a, 0x18, 0x59, 0x99, 0x5c, - 0xd3, 0x1b, 0x59, 0x19, 0xdb, 0x94, 0x20, 0x29, 0x43, 0x86, 0xe7, 0x22, - 0x57, 0x36, 0xf7, 0x56, 0x27, 0x37, 0x56, 0x36, 0x37, 0x25, 0xd8, 0xea, - 0x90, 0xe1, 0xb9, 0x94, 0xb9, 0xd1, 0xc9, 0xe5, 0x41, 0xbd, 0xa5, 0xb9, - 0xd1, 0xcd, 0x4d, 0x09, 0xc4, 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, 0x26, 0x00, 0x00, 0x00, - 0x06, 0x60, 0x70, 0xac, 0x09, 0x20, 0x8d, 0x0d, 0x40, 0xc3, 0xe5, 0x3b, - 0x8f, 0x1f, 0x20, 0x0d, 0x10, 0x61, 0x7e, 0x71, 0xdb, 0x66, 0xb0, 0x0d, - 0x97, 0xef, 0x3c, 0xbe, 0x10, 0x50, 0x45, 0x41, 0x44, 0xa5, 0x03, 0x0c, - 0x25, 0x61, 0x00, 0x02, 0xe6, 0x17, 0xb7, 0x6d, 0x07, 0xdb, 0x70, 0xf9, - 0xce, 0xe3, 0x0b, 0x01, 0x55, 0x14, 0x44, 0x54, 0x3a, 0xc0, 0x50, 0x12, - 0x06, 0x20, 0x60, 0x3e, 0x72, 0xdb, 0x86, 0x20, 0x0d, 0x97, 0xef, 0x3c, - 0xbe, 0x10, 0x11, 0xc0, 0x44, 0x84, 0x40, 0x33, 0x2c, 0x84, 0x09, 0x54, - 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, 0xd7, 0x44, 0x45, 0x44, 0xe9, 0x00, - 0x83, 0x5f, 0xdc, 0xb6, 0x15, 0x58, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x11, - 0xd7, 0x44, 0x45, 0x04, 0x3b, 0x39, 0x11, 0xe1, 0x17, 0xb7, 0x6d, 0x01, - 0xd2, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0x47, 0x44, 0x00, 0x83, 0x38, 0xf8, - 0xc8, 0x6d, 0x1b, 0xc1, 0x33, 0x5c, 0xbe, 0xf3, 0xf8, 0x54, 0x03, 0x44, - 0x98, 0x5f, 0xdc, 0x36, 0x00, 0x00, 0x00, 0x00, 0x61, 0x20, 0x00, 0x00, - 0x53, 0x01, 0x00, 0x00, 0x13, 0x04, 0x56, 0x2c, 0x10, 0x00, 0x00, 0x00, - 0x14, 0x00, 0x00, 0x00, 0x34, 0xcc, 0x00, 0x94, 0x51, 0x21, 0x15, 0x61, - 0x40, 0xd9, 0x95, 0x5c, 0xe9, 0x06, 0x94, 0x61, 0x40, 0x0d, 0x10, 0x52, - 0x04, 0x25, 0x50, 0x1e, 0x23, 0x00, 0x64, 0x8c, 0x11, 0x80, 0x20, 0x08, - 0xa2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0x0a, 0x0e, 0x63, 0x04, 0x20, - 0x08, 0x82, 0x20, 0x28, 0x8c, 0x11, 0x80, 0x20, 0x08, 0x92, 0xbf, 0x30, - 0x46, 0x00, 0x82, 0x20, 0x48, 0x83, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, - 0x0a, 0x06, 0x23, 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x07, 0x00, - 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xa0, 0x91, 0x01, 0xb4, 0x88, 0x81, - 0x18, 0x68, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xa0, 0x95, 0x41, 0xa4, - 0x90, 0x01, 0x19, 0x6c, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, 0xa0, 0x99, - 0x81, 0xb4, 0x90, 0x01, 0x19, 0x70, 0x23, 0x06, 0x09, 0x00, 0x82, 0x60, - 0xa0, 0x9d, 0xc1, 0xf4, 0x94, 0x41, 0x19, 0x74, 0x23, 0x06, 0x06, 0x00, - 0x82, 0x60, 0x40, 0xbc, 0xc1, 0x64, 0x06, 0x23, 0x06, 0x06, 0x00, 0x82, - 0x60, 0x40, 0xc0, 0x01, 0x85, 0x06, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, - 0x40, 0xb1, 0xc1, 0x35, 0xa0, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x18, 0x1c, - 0x00, 0x08, 0x82, 0xc1, 0xd5, 0x06, 0x59, 0xa1, 0x06, 0xa3, 0x09, 0x41, - 0x30, 0xdc, 0x10, 0xb0, 0x81, 0x19, 0xcc, 0x32, 0x04, 0x4c, 0x30, 0x9a, - 0x30, 0x08, 0xc3, 0x0d, 0x81, 0x1b, 0x98, 0xc1, 0x2c, 0x83, 0x30, 0x04, - 0x23, 0x06, 0x0d, 0x00, 0x82, 0x60, 0xb0, 0xdc, 0xc1, 0xc7, 0xbc, 0x41, - 0x82, 0x88, 0x81, 0x18, 0x88, 0x81, 0x18, 0x8c, 0x26, 0x04, 0xc0, 0x68, - 0x82, 0x10, 0xcc, 0x12, 0x10, 0xc7, 0x18, 0x35, 0x62, 0x70, 0x00, 0x20, - 0x08, 0x06, 0xd4, 0x1d, 0x88, 0x81, 0x43, 0x07, 0xa3, 0x09, 0x41, 0x60, - 0xc1, 0x20, 0x9f, 0x0b, 0x06, 0x3a, 0xc8, 0x28, 0x23, 0x02, 0xf9, 0x5c, - 0x30, 0xd0, 0x88, 0x41, 0x03, 0x80, 0x20, 0x18, 0x2c, 0xa2, 0xa0, 0x06, - 0x97, 0x1e, 0x10, 0x41, 0x1b, 0xb4, 0x41, 0x1b, 0xb4, 0xc1, 0x68, 0x42, - 0x00, 0x8c, 0x26, 0x08, 0xc1, 0x2c, 0x01, 0x31, 0x50, 0x61, 0x68, 0x02, - 0x31, 0x0c, 0x54, 0x18, 0x9a, 0x40, 0x0c, 0x23, 0x06, 0x07, 0x00, 0x82, - 0x60, 0x40, 0x8d, 0x82, 0x1b, 0x68, 0xa0, 0x30, 0x9a, 0x10, 0x0c, 0x16, - 0x0c, 0xf2, 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0x07, 0x15, 0x40, - 0x21, 0x18, 0x4d, 0x20, 0x04, 0x0b, 0x0e, 0xf9, 0x8c, 0x18, 0x18, 0x00, - 0x08, 0x82, 0xc1, 0xb3, 0x0a, 0xa3, 0x10, 0x8c, 0x18, 0x1c, 0x00, 0x08, - 0x82, 0x41, 0xd3, 0x0a, 0x78, 0x10, 0x10, 0x23, 0x06, 0x07, 0x00, 0x82, - 0x60, 0x40, 0xad, 0x82, 0x1d, 0x88, 0x01, 0x29, 0x8c, 0x26, 0x04, 0xc0, - 0x70, 0xc4, 0x10, 0x08, 0xdf, 0x68, 0xc2, 0x02, 0xcc, 0x32, 0x14, 0x86, - 0x30, 0x9a, 0x40, 0x04, 0x16, 0x10, 0xf1, 0xb1, 0x23, 0xa0, 0x8f, 0x11, - 0x81, 0x7c, 0x66, 0x09, 0x8c, 0x81, 0x0a, 0x43, 0x28, 0x7c, 0x81, 0x18, - 0x8e, 0x08, 0x0c, 0xe1, 0x1b, 0x8e, 0x38, 0xe2, 0x40, 0xf8, 0x4a, 0x08, - 0x74, 0x96, 0x01, 0x39, 0x82, 0xe1, 0x08, 0x22, 0x21, 0xbe, 0xe1, 0x08, - 0x85, 0x0e, 0x88, 0xaf, 0x84, 0x40, 0x67, 0x19, 0x90, 0x24, 0x98, 0x25, - 0x48, 0x06, 0x2a, 0x0c, 0x0c, 0x71, 0x0e, 0x0b, 0xdc, 0x00, 0x3e, 0xc3, - 0x11, 0xc1, 0x1d, 0x08, 0xdf, 0x2c, 0x03, 0xa3, 0x04, 0xc3, 0x11, 0x42, - 0x1e, 0x10, 0xdf, 0x2c, 0xc3, 0xc2, 0x04, 0xb3, 0x04, 0xcc, 0x40, 0x89, - 0x41, 0x0f, 0x8b, 0xa1, 0x88, 0x03, 0x20, 0x0f, 0xc9, 0x88, 0x41, 0x03, - 0x80, 0x20, 0x18, 0x2c, 0xe3, 0xb0, 0x0a, 0x77, 0xb0, 0x0b, 0x75, 0x40, - 0x07, 0xae, 0xe0, 0x0a, 0xae, 0xe0, 0x0a, 0xa3, 0x09, 0x01, 0x30, 0x9a, - 0x20, 0x04, 0xa3, 0x09, 0x83, 0x30, 0x1c, 0x51, 0xfc, 0x41, 0xf0, 0x8d, - 0x26, 0xd8, 0xc1, 0x30, 0xdc, 0x10, 0x84, 0x83, 0x19, 0xcc, 0x32, 0x34, - 0xd0, 0x50, 0x81, 0x1d, 0xe8, 0x70, 0x84, 0x1e, 0x8c, 0x82, 0xf0, 0x95, - 0x10, 0xe8, 0x2c, 0x83, 0xf3, 0x04, 0xc6, 0x07, 0xa7, 0x20, 0x1f, 0x0b, - 0x4a, 0x01, 0x3e, 0x16, 0x28, 0xf2, 0x99, 0x25, 0x78, 0x06, 0x2a, 0x0c, - 0xc1, 0xb1, 0x9a, 0x11, 0x03, 0x07, 0x00, 0x41, 0x30, 0x88, 0xdc, 0xa1, - 0x16, 0x4e, 0x61, 0x14, 0x44, 0x81, 0x17, 0x9a, 0x60, 0x69, 0x62, 0x61, - 0x96, 0xa0, 0x2a, 0x51, 0xa0, 0x05, 0x18, 0x31, 0x68, 0x00, 0x10, 0x04, - 0x83, 0x45, 0x1e, 0x74, 0xc1, 0x14, 0xd4, 0x81, 0x14, 0x82, 0x5e, 0xe8, - 0x85, 0x5e, 0xe8, 0x85, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, - 0x84, 0x41, 0x28, 0x54, 0xc8, 0x05, 0x18, 0x31, 0x68, 0x00, 0x10, 0x04, - 0x83, 0xe5, 0x1e, 0x7e, 0x61, 0x15, 0xde, 0x21, 0x40, 0x05, 0x71, 0x10, - 0x07, 0x71, 0x10, 0x87, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, - 0x84, 0x41, 0xa8, 0x56, 0xa0, 0x07, 0x18, 0x31, 0x68, 0x00, 0x10, 0x04, - 0x83, 0x85, 0x1f, 0xc8, 0x01, 0x16, 0xe8, 0x21, 0x68, 0x85, 0x73, 0x38, - 0x87, 0x73, 0x38, 0x87, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, - 0x84, 0x41, 0xa8, 0x58, 0xc8, 0x07, 0x18, 0x31, 0x68, 0x00, 0x10, 0x04, - 0x83, 0x25, 0x24, 0xd2, 0xa1, 0x16, 0xf2, 0x61, 0x16, 0x02, 0x76, 0x60, - 0x07, 0x76, 0x60, 0x87, 0xd1, 0x84, 0x00, 0x18, 0x4d, 0x10, 0x82, 0xd1, - 0x84, 0x41, 0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x86, 0x24, 0xdc, - 0x01, 0x19, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x29, 0x89, 0x77, - 0x40, 0x86, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x4c, 0x02, 0x1e, - 0x90, 0x61, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0x93, 0x88, 0x87, - 0x0a, 0x1a, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x06, 0x25, 0xe4, 0xa1, - 0x82, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x49, 0x89, 0x79, 0xa8, - 0xa0, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x54, 0x82, 0x1e, 0x06, - 0x63, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0x95, 0xa8, 0x87, 0xc1, - 0x18, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x86, 0x25, 0xec, 0x61, 0x30, - 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x69, 0x09, 0x7c, 0x88, 0x98, - 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x5c, 0x22, 0x1f, 0x22, 0x66, - 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0x97, 0xd0, 0x87, 0x88, 0x19, - 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x06, 0x26, 0xf6, 0xc1, 0xcb, 0x46, - 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x89, 0x09, 0x7e, 0xf0, 0xb2, 0x11, - 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x64, 0xa2, 0x1f, 0xbc, 0x6c, 0xc4, - 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0x99, 0xf0, 0x87, 0xc1, 0x18, 0x31, - 0x38, 0x00, 0x10, 0x04, 0x83, 0x86, 0x26, 0xfe, 0x61, 0x30, 0x46, 0x0c, - 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0xa9, 0x09, 0x90, 0x18, 0x0c, 0xab, 0x87, - 0x81, 0x3e, 0x66, 0x0f, 0x03, 0x7d, 0xec, 0x1e, 0x06, 0xfa, 0x58, 0x3c, - 0x18, 0xf1, 0x31, 0x79, 0x30, 0xe2, 0x63, 0xf3, 0x60, 0xc4, 0xc7, 0x24, - 0x7b, 0x90, 0x8f, 0x49, 0xf7, 0x20, 0x1f, 0x93, 0xf0, 0x41, 0x3e, 0x36, - 0xf4, 0x03, 0x7c, 0x6c, 0xf0, 0x07, 0xf8, 0xd8, 0xf0, 0x0f, 0xf0, 0x31, - 0x7d, 0x18, 0xe8, 0x63, 0xfb, 0x30, 0xd0, 0xc7, 0xf8, 0x61, 0xa0, 0x8f, - 0x0d, 0x8c, 0x7c, 0x6c, 0x60, 0xe4, 0x63, 0x03, 0x23, 0x1f, 0xf3, 0x24, - 0xf9, 0x98, 0x49, 0x04, 0xf1, 0xb1, 0x6f, 0x92, 0x8f, 0xa1, 0x44, 0x10, - 0x1f, 0x03, 0x03, 0x4a, 0x3e, 0xa6, 0x12, 0x41, 0x7c, 0x46, 0x0c, 0x0e, - 0x00, 0x04, 0xc1, 0xa0, 0x71, 0x8b, 0x9c, 0x28, 0x92, 0x11, 0x83, 0x03, - 0x00, 0x41, 0x30, 0x68, 0xde, 0x42, 0x27, 0x88, 0x64, 0xc4, 0xe0, 0x00, - 0x40, 0x10, 0x0c, 0x1a, 0xb8, 0xd8, 0x89, 0x21, 0x19, 0x31, 0x38, 0x00, - 0x10, 0x04, 0x83, 0x26, 0x2e, 0x78, 0x42, 0x08, 0x46, 0x0c, 0x0e, 0x00, - 0x04, 0xc1, 0xa0, 0x91, 0x8b, 0x9e, 0x20, 0x82, 0x11, 0x83, 0x03, 0x00, - 0x41, 0x30, 0x68, 0xe6, 0xa2, 0x27, 0x02, 0x96, 0x18, 0x31, 0x38, 0x00, - 0x10, 0x04, 0x83, 0x86, 0x2e, 0x7e, 0x02, 0x26, 0x02, 0x0b, 0x68, 0x41, - 0x3e, 0x16, 0xc0, 0x84, 0x7c, 0x2c, 0x78, 0x09, 0xf8, 0x18, 0x4c, 0x04, - 0xf4, 0x31, 0x51, 0x38, 0x05, 0xf8, 0x98, 0x28, 0x9c, 0x02, 0x7c, 0x4c, - 0x14, 0x4e, 0x01, 0x3e, 0x36, 0x80, 0x02, 0x7c, 0x6c, 0x00, 0x05, 0xf8, - 0xd8, 0x00, 0x0a, 0xf0, 0xb1, 0xc1, 0x0f, 0xe0, 0x63, 0x83, 0x1f, 0xc0, - 0xc7, 0x06, 0x3f, 0x80, 0x8f, 0x35, 0x83, 0x7c, 0xcc, 0x19, 0xe4, 0x63, - 0xcf, 0x20, 0x1f, 0x1b, 0xc4, 0x01, 0x3e, 0x36, 0x88, 0x03, 0x7c, 0x6c, - 0x10, 0x07, 0xf8, 0xd8, 0x00, 0xc9, 0xc7, 0x86, 0x48, 0x3e, 0x36, 0x48, - 0xf2, 0xa9, 0x71, 0xc0, 0x09, 0x9d, 0x65, 0x88, 0xa8, 0x60, 0x38, 0x82, - 0x27, 0xd6, 0x81, 0xf8, 0x66, 0x19, 0xa4, 0x29, 0x30, 0x76, 0xe8, 0x89, - 0xf8, 0x58, 0x90, 0x16, 0xf2, 0xb1, 0xe0, 0x2c, 0xe0, 0x63, 0x01, 0x22, - 0x9f, 0x59, 0x02, 0xca, 0xc2, 0x02, 0x1e, 0xe2, 0x63, 0x41, 0x5b, 0xc8, - 0xc7, 0x82, 0xb5, 0x80, 0x8f, 0x05, 0x8b, 0x7c, 0x66, 0x09, 0xa8, 0x81, - 0x0e, 0x43, 0x91, 0xb4, 0x49, 0x83, 0x06, 0x3a, 0x0c, 0x4d, 0x22, 0x26, - 0x0d, 0x1a, 0x31, 0x70, 0x00, 0x10, 0x04, 0x83, 0xa8, 0x36, 0xf8, 0xc2, - 0x2d, 0xd4, 0x22, 0x2d, 0x46, 0x43, 0x08, 0x1a, 0x01, 0x2f, 0x66, 0x09, - 0x2a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + 0x2c, 0x84, 0x19, 0x38, 0xc3, 0xe5, 0x3b, 0x8f, 0x3f, 0x38, 0xd3, 0xed, + 0x17, 0xb7, 0x6d, 0x02, 0xd5, 0x70, 0xf9, 0xce, 0xe3, 0x4f, 0xc4, 0x35, + 0x51, 0x11, 0x51, 0x3a, 0xc0, 0xe0, 0x17, 0xb7, 0x6d, 0x05, 0xd6, 0x70, + 0xf9, 0xce, 0xe3, 0x4f, 0xc4, 0x35, 0x51, 0x11, 0xc1, 0x4e, 0x4e, 0x44, + 0xf8, 0xc5, 0x6d, 0x5b, 0x80, 0x34, 0x5c, 0xbe, 0xf3, 0xf8, 0xd3, 0x11, + 0x11, 0xc0, 0x20, 0x0e, 0x3e, 0x72, 0xdb, 0x46, 0xf0, 0x0c, 0x97, 0xef, + 0x3c, 0x3e, 0xd5, 0x00, 0x11, 0xe6, 0x17, 0xb7, 0x0d, 0x00, 0x00, 0x00, + 0x61, 0x20, 0x00, 0x00, 0x9d, 0x01, 0x00, 0x00, 0x13, 0x04, 0x56, 0x2c, + 0x10, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x34, 0xcc, 0x00, 0x94, + 0x51, 0x21, 0x15, 0x61, 0x40, 0xd9, 0x95, 0x5b, 0xc9, 0x95, 0x6e, 0x40, + 0x19, 0x06, 0xd4, 0x40, 0x39, 0x10, 0x52, 0x04, 0x25, 0x50, 0x1e, 0x23, + 0x00, 0x64, 0x8c, 0x11, 0xd4, 0xa6, 0x2f, 0x9b, 0xdf, 0x18, 0x01, 0x08, + 0x82, 0x20, 0xfa, 0x8d, 0x11, 0x80, 0x20, 0x08, 0xa2, 0x60, 0x30, 0x46, + 0x00, 0x82, 0x20, 0x48, 0x83, 0xc1, 0x18, 0x01, 0x08, 0x82, 0x20, 0x0a, + 0x0e, 0x63, 0x04, 0x20, 0x08, 0x82, 0x20, 0x28, 0x8c, 0x11, 0x80, 0x20, + 0x08, 0xc2, 0xdf, 0x18, 0x01, 0x08, 0x82, 0x20, 0xf9, 0x0b, 0x63, 0x04, + 0x62, 0x1b, 0xb3, 0xf9, 0x37, 0x46, 0x70, 0xd2, 0xa5, 0x1c, 0x7f, 0x23, + 0x00, 0x63, 0x04, 0x20, 0x08, 0x82, 0xf8, 0x07, 0x23, 0x06, 0x09, 0x00, + 0x82, 0x60, 0xc0, 0xa9, 0x41, 0xf5, 0xa0, 0x01, 0x1a, 0x80, 0xc1, 0x88, + 0x41, 0x02, 0x80, 0x20, 0x18, 0x70, 0x6b, 0x60, 0x39, 0x6a, 0xa0, 0x06, + 0x61, 0x30, 0x62, 0x90, 0x00, 0x20, 0x08, 0x06, 0x1c, 0x1b, 0x5c, 0x8f, + 0x1a, 0xa8, 0x81, 0x18, 0x8c, 0x18, 0x24, 0x00, 0x08, 0x82, 0x01, 0xd7, + 0x06, 0xd8, 0xb4, 0x06, 0x6b, 0x30, 0x06, 0x23, 0x06, 0x06, 0x00, 0x82, + 0x60, 0x40, 0xd8, 0x01, 0xc6, 0x06, 0x23, 0x06, 0x06, 0x00, 0x82, 0x60, + 0x40, 0xdc, 0x41, 0xe6, 0x06, 0x23, 0x06, 0x07, 0x00, 0x82, 0x60, 0x60, + 0xc9, 0x41, 0x37, 0xb8, 0xc1, 0x68, 0x42, 0x00, 0x8c, 0x18, 0x1c, 0x00, + 0x08, 0x82, 0x41, 0x36, 0x07, 0x5f, 0x01, 0x07, 0xa3, 0x09, 0x41, 0x30, + 0xdc, 0x10, 0xc8, 0x81, 0x19, 0xcc, 0x32, 0x04, 0x4c, 0x30, 0x9a, 0x30, + 0x08, 0xc3, 0x0d, 0x01, 0x1d, 0x98, 0xc1, 0x2c, 0x83, 0x30, 0x04, 0x23, + 0x06, 0x0d, 0x00, 0x82, 0x60, 0xb0, 0xf8, 0x41, 0x19, 0x30, 0x75, 0x90, + 0x20, 0x68, 0x80, 0x06, 0x68, 0x80, 0x06, 0xa3, 0x09, 0x01, 0x30, 0x9a, + 0x20, 0x04, 0xb3, 0x04, 0xc4, 0x31, 0x46, 0x8d, 0x18, 0x1c, 0x00, 0x08, + 0x82, 0x81, 0xd5, 0x07, 0x68, 0xe0, 0xe8, 0xc1, 0x68, 0x42, 0x10, 0x58, + 0x30, 0xc8, 0xe7, 0x82, 0x81, 0x0e, 0x32, 0xca, 0x88, 0x40, 0x3e, 0x17, + 0x0c, 0x34, 0x62, 0xd0, 0x00, 0x20, 0x08, 0x06, 0x4b, 0x2a, 0xc0, 0xc1, + 0x05, 0x0a, 0x44, 0x30, 0x07, 0x73, 0x30, 0x07, 0x73, 0x30, 0x9a, 0x10, + 0x00, 0xa3, 0x09, 0x42, 0x30, 0x4b, 0x40, 0x0c, 0x54, 0x18, 0x9a, 0x40, + 0x0c, 0x03, 0x15, 0x86, 0x26, 0x10, 0xc3, 0x88, 0xc1, 0x01, 0x80, 0x20, + 0x18, 0x58, 0xa9, 0x40, 0x07, 0x9a, 0x29, 0x8c, 0x26, 0x04, 0x83, 0x05, + 0x83, 0x7c, 0x46, 0x0c, 0x0c, 0x00, 0x04, 0xc1, 0xe0, 0x79, 0x05, 0x53, + 0x08, 0x46, 0x13, 0x08, 0xc1, 0x82, 0x43, 0x3e, 0x23, 0x06, 0x06, 0x00, + 0x82, 0x60, 0xf0, 0xc8, 0x42, 0x2a, 0x04, 0x23, 0x06, 0x07, 0x00, 0x82, + 0x60, 0xd0, 0xd0, 0x82, 0x1f, 0x04, 0xc4, 0x88, 0xc1, 0x01, 0x80, 0x20, + 0x18, 0x58, 0xb1, 0xc0, 0x07, 0x62, 0xa0, 0x0a, 0xa3, 0x09, 0x01, 0x30, + 0x1c, 0x31, 0x04, 0xc2, 0x37, 0x9a, 0xb0, 0x00, 0xb3, 0x0c, 0x85, 0x21, + 0x8c, 0x26, 0x10, 0x81, 0x05, 0x44, 0x7c, 0xec, 0x08, 0xe8, 0x63, 0x44, + 0x20, 0x9f, 0x59, 0x02, 0x63, 0xa0, 0xc2, 0x10, 0x0a, 0x5f, 0x20, 0x86, + 0x23, 0x02, 0x43, 0xf8, 0x86, 0x23, 0x8e, 0x38, 0x10, 0xbe, 0x12, 0x02, + 0x9d, 0x65, 0x40, 0x8e, 0x60, 0x38, 0x82, 0x48, 0x88, 0x6f, 0x38, 0x42, + 0xa1, 0x03, 0xe2, 0x2b, 0x21, 0xd0, 0x59, 0x06, 0x24, 0x09, 0x66, 0x09, + 0x92, 0x81, 0x0a, 0x03, 0x43, 0x9c, 0xc3, 0x02, 0x37, 0x80, 0xcf, 0x70, + 0x44, 0x70, 0x07, 0xc2, 0x37, 0xcb, 0xc0, 0x28, 0xc1, 0x70, 0x84, 0x90, + 0x07, 0xc4, 0x37, 0xcb, 0xb0, 0x30, 0xc1, 0x2c, 0x01, 0x33, 0x50, 0x62, + 0xd0, 0xc3, 0x62, 0x28, 0xe2, 0x00, 0xc8, 0x43, 0x32, 0x62, 0xd0, 0x00, + 0x20, 0x08, 0x06, 0x8b, 0x3a, 0xc4, 0xc2, 0x1d, 0x84, 0x43, 0x1d, 0xd0, + 0x01, 0x2d, 0xd0, 0x02, 0x2d, 0xd0, 0xc2, 0x68, 0x42, 0x00, 0x8c, 0x26, + 0x08, 0xc1, 0x68, 0xc2, 0x20, 0x0c, 0x47, 0x14, 0x7f, 0x10, 0x7c, 0xa3, + 0x09, 0x76, 0x30, 0x0c, 0x37, 0x04, 0xe7, 0x60, 0x06, 0xb3, 0x0c, 0x0d, + 0x34, 0x54, 0x60, 0x07, 0x3a, 0x1c, 0xa1, 0x07, 0xa3, 0x20, 0x7c, 0x25, + 0x04, 0x3a, 0xcb, 0xe0, 0x3c, 0x81, 0xf1, 0x01, 0x2b, 0xc8, 0xc7, 0x82, + 0x52, 0x80, 0x8f, 0x05, 0x8a, 0x7c, 0x66, 0x09, 0x9e, 0x81, 0x0a, 0x43, + 0x70, 0xac, 0x66, 0xc4, 0xc0, 0x01, 0x40, 0x10, 0x0c, 0xa2, 0x7a, 0xd0, + 0x85, 0x53, 0x18, 0x05, 0x51, 0x10, 0x87, 0x26, 0x58, 0x9a, 0x5a, 0x98, + 0x25, 0xa8, 0x4a, 0x14, 0x72, 0x01, 0x46, 0x0c, 0x1a, 0x00, 0x04, 0xc1, + 0x60, 0xc9, 0x07, 0x70, 0x30, 0x05, 0x78, 0x20, 0x85, 0x60, 0x1c, 0xc6, + 0x61, 0x1c, 0xc6, 0x61, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, + 0x61, 0x10, 0x0a, 0x15, 0x7c, 0x01, 0x46, 0x0c, 0x1a, 0x00, 0x04, 0xc1, + 0x60, 0xf1, 0x87, 0x72, 0x58, 0x85, 0x7a, 0x08, 0x50, 0x01, 0x1d, 0xd0, + 0x01, 0x1d, 0xd0, 0x61, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, + 0x61, 0x10, 0xaa, 0x15, 0xf4, 0x01, 0x46, 0x0c, 0x1a, 0x00, 0x04, 0xc1, + 0x60, 0x19, 0x09, 0x75, 0x80, 0x05, 0x7d, 0x08, 0x5a, 0xa1, 0x1d, 0xda, + 0xa1, 0x1d, 0xda, 0x61, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, + 0x61, 0x10, 0x2a, 0x16, 0xfe, 0x01, 0x46, 0x0c, 0x1a, 0x00, 0x04, 0xc1, + 0x60, 0x41, 0x89, 0x77, 0xa8, 0x85, 0x7f, 0x98, 0x85, 0x40, 0x1e, 0xe4, + 0x41, 0x1e, 0xe4, 0x61, 0x34, 0x21, 0x00, 0x46, 0x13, 0x84, 0x60, 0x34, + 0x61, 0x10, 0x46, 0x0c, 0x16, 0x00, 0x04, 0xc1, 0x60, 0x42, 0x89, 0x78, + 0x90, 0x22, 0xc8, 0x17, 0x7e, 0xe1, 0x1c, 0x46, 0x0c, 0x16, 0x00, 0x04, + 0xc1, 0x60, 0x4a, 0x09, 0x79, 0x70, 0x1a, 0xe6, 0x17, 0xc0, 0x01, 0x1d, + 0x46, 0x0c, 0x16, 0x00, 0x04, 0xc1, 0x60, 0x52, 0x89, 0x79, 0x18, 0x03, + 0x31, 0x08, 0x03, 0x70, 0x08, 0x87, 0x74, 0x18, 0x31, 0x58, 0x00, 0x10, + 0x04, 0x83, 0x69, 0x25, 0xe8, 0x61, 0x51, 0x92, 0x70, 0x10, 0x07, 0x75, + 0x18, 0x31, 0x58, 0x00, 0x10, 0x04, 0x83, 0x89, 0x25, 0xea, 0xe1, 0x30, + 0x0a, 0x71, 0x18, 0x87, 0x75, 0x30, 0xa2, 0x80, 0x8f, 0x05, 0x03, 0x7c, + 0x2c, 0x18, 0xe0, 0x63, 0x81, 0x3b, 0xc8, 0xc7, 0x82, 0x23, 0x3e, 0x23, + 0x06, 0x07, 0x00, 0x82, 0x60, 0xd0, 0xd4, 0xc4, 0x3f, 0x18, 0xc7, 0x88, + 0xc1, 0x01, 0x80, 0x20, 0x18, 0x34, 0x36, 0x01, 0x12, 0x8b, 0x32, 0x62, + 0x70, 0x00, 0x20, 0x08, 0x06, 0xcd, 0x4d, 0x84, 0x44, 0x20, 0x8c, 0x18, + 0x1c, 0x00, 0x08, 0x82, 0x41, 0x83, 0x13, 0x22, 0x11, 0x2c, 0x23, 0x06, + 0x07, 0x00, 0x82, 0x60, 0xd0, 0xe4, 0x84, 0x48, 0x30, 0xcb, 0x88, 0xc1, + 0x01, 0x80, 0x20, 0x18, 0x34, 0x3a, 0x31, 0x12, 0x8f, 0x33, 0x62, 0x70, + 0x00, 0x20, 0x08, 0x06, 0xcd, 0x4e, 0x90, 0x44, 0x20, 0x8c, 0x18, 0x1c, + 0x00, 0x08, 0x82, 0x41, 0xc3, 0x13, 0x25, 0x11, 0x34, 0x56, 0x04, 0xf1, + 0x19, 0x31, 0x30, 0x00, 0x10, 0x04, 0x83, 0xa7, 0x27, 0x68, 0x42, 0x31, + 0x78, 0x10, 0xe8, 0x63, 0x81, 0x20, 0x9f, 0x11, 0x03, 0x03, 0x00, 0x41, + 0x30, 0x78, 0xc0, 0x42, 0x24, 0x02, 0x0b, 0xf0, 0x41, 0x3e, 0x46, 0x0f, + 0x41, 0x7c, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x21, 0x8b, 0x96, + 0x08, 0x03, 0x6e, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0xb2, 0x70, + 0x89, 0x30, 0xe0, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x31, 0x8b, + 0x97, 0x08, 0x03, 0x6e, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0xb3, + 0x80, 0x09, 0x37, 0x48, 0x83, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, + 0xd0, 0x22, 0x26, 0xdc, 0x20, 0x0d, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, + 0xa0, 0x49, 0x0b, 0x99, 0x70, 0x83, 0x34, 0x18, 0x31, 0x38, 0x00, 0x10, + 0x04, 0x83, 0x46, 0x2d, 0x66, 0x62, 0x30, 0x46, 0x0c, 0x0e, 0x00, 0x04, + 0xc1, 0xa0, 0x59, 0x0b, 0x9a, 0x18, 0x8c, 0x11, 0x83, 0x03, 0x00, 0x41, + 0x30, 0x68, 0xd8, 0xa2, 0x26, 0x06, 0x63, 0xc4, 0xe0, 0x00, 0x40, 0x10, + 0x0c, 0x9a, 0xb6, 0xb8, 0x09, 0x35, 0x28, 0x83, 0x11, 0x83, 0x03, 0x00, + 0x41, 0x30, 0x68, 0xdc, 0x02, 0x27, 0xd4, 0xa0, 0x0c, 0x46, 0x0c, 0x0e, + 0x00, 0x04, 0xc1, 0xa0, 0x79, 0x8b, 0x9c, 0x50, 0x83, 0x32, 0x18, 0x31, + 0x38, 0x00, 0x10, 0x04, 0x83, 0x06, 0x2e, 0x74, 0xe2, 0x0e, 0xe4, 0x60, + 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0xb8, 0xd8, 0x89, 0x3b, 0x90, + 0x83, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0xe4, 0x82, 0x27, 0xee, + 0x40, 0x0e, 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x99, 0x8b, 0x9e, + 0x18, 0x8c, 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0xe8, 0xc2, 0x27, + 0x06, 0x63, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x9a, 0xba, 0xf8, 0x89, + 0xc1, 0xb0, 0x98, 0x18, 0xe8, 0x63, 0x32, 0x31, 0xd0, 0xc7, 0x66, 0x62, + 0xa0, 0x8f, 0xa9, 0x84, 0x11, 0x1f, 0x5b, 0x09, 0x23, 0x3e, 0xc6, 0x12, + 0x46, 0x7c, 0x4c, 0xb2, 0x09, 0xf9, 0x98, 0x74, 0x13, 0xf2, 0x31, 0x09, + 0x27, 0xe4, 0x63, 0xc3, 0x4d, 0xc0, 0xc7, 0x06, 0x9c, 0x80, 0x8f, 0x0d, + 0x39, 0x01, 0x1f, 0x9b, 0x89, 0x81, 0x3e, 0x46, 0x13, 0x03, 0x7d, 0xac, + 0x26, 0x06, 0xfa, 0xd8, 0xc0, 0xc8, 0xc7, 0x06, 0x46, 0x3e, 0x36, 0x30, + 0xf2, 0x31, 0x4f, 0x92, 0x8f, 0x81, 0x45, 0x10, 0x1f, 0xfb, 0x26, 0xf9, + 0x98, 0x58, 0x04, 0xf1, 0x31, 0x30, 0xa0, 0xe4, 0x63, 0x64, 0x11, 0xc4, + 0x67, 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x1a, 0xd7, 0xc0, 0x8b, 0x22, + 0x19, 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0xe6, 0x35, 0xf2, 0x82, 0x48, + 0x46, 0x0c, 0x0e, 0x00, 0x04, 0xc1, 0xa0, 0x81, 0x0d, 0xbd, 0x18, 0x92, + 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x62, 0x63, 0x2f, 0x84, 0x60, + 0xc4, 0xe0, 0x00, 0x40, 0x10, 0x0c, 0x1a, 0xd9, 0xe0, 0x0b, 0x22, 0x18, + 0x31, 0x38, 0x00, 0x10, 0x04, 0x83, 0x66, 0x36, 0xf8, 0x22, 0x28, 0x8b, + 0x11, 0x83, 0x03, 0x00, 0x41, 0x30, 0x68, 0x68, 0xc3, 0x2f, 0xd2, 0x22, + 0x30, 0x39, 0x90, 0x03, 0xf9, 0x58, 0xe0, 0x0e, 0xf2, 0xb1, 0x60, 0x90, + 0x8f, 0x05, 0x72, 0x21, 0x1f, 0x0b, 0xd4, 0x02, 0x3e, 0xb6, 0x16, 0x01, + 0x7d, 0xac, 0x17, 0xc4, 0x01, 0x3e, 0xd6, 0x0b, 0xe2, 0x00, 0x1f, 0xeb, + 0x05, 0x71, 0x80, 0x8f, 0x0d, 0xbb, 0x00, 0x1f, 0x1b, 0x76, 0x01, 0x3e, + 0x36, 0xec, 0x02, 0x7c, 0x6c, 0xc8, 0x05, 0xf8, 0xd8, 0x90, 0x0b, 0xf0, + 0xb1, 0x21, 0x17, 0xe0, 0x63, 0xcd, 0x20, 0x1f, 0x73, 0x06, 0xf9, 0xd8, + 0x33, 0xc8, 0xc7, 0x86, 0x7e, 0x80, 0x8f, 0x0d, 0xfd, 0x00, 0x1f, 0x1b, + 0xfa, 0x01, 0x3e, 0x36, 0x40, 0xf2, 0xb1, 0x21, 0x92, 0x8f, 0x0d, 0x92, + 0x7c, 0xca, 0x1f, 0xe6, 0x42, 0x67, 0x19, 0x22, 0x2a, 0x18, 0x8e, 0xb8, + 0x0b, 0x93, 0x20, 0xbe, 0x59, 0x06, 0x69, 0x0a, 0xec, 0x24, 0xf0, 0x22, + 0x3e, 0x16, 0xa4, 0x86, 0x7c, 0x2c, 0x10, 0x0d, 0xf8, 0x58, 0x80, 0xc8, + 0x67, 0x96, 0x80, 0x32, 0xbe, 0x58, 0x89, 0xf8, 0x58, 0xd0, 0x1a, 0xf2, + 0xb1, 0xc0, 0x34, 0xe0, 0x63, 0xc1, 0x22, 0x9f, 0x59, 0x02, 0x6a, 0xa0, + 0xc3, 0x50, 0x24, 0x6d, 0xd2, 0xa0, 0x81, 0x0e, 0x43, 0x93, 0x88, 0x49, + 0x83, 0x46, 0x0c, 0x1c, 0x00, 0x04, 0xc1, 0x20, 0xba, 0x0f, 0xde, 0x48, + 0x8d, 0xd2, 0x20, 0x0d, 0xf2, 0x10, 0x82, 0x46, 0xb8, 0x8d, 0x59, 0x82, + 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; diff --git a/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.cso b/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.cso index 73745a8e907f80df3ff684489d503f098e209e37..988ba4262bdcb405bdac25316d55952cbc1dd4a4 100644 GIT binary patch delta 782 zcmZ{izfZzI6vtmnwY2iP2}BWt#yGeM4vjHT5t#|b#ML-4xa(j*9CS5joSgI@P+1&| zE>7+aZkjl`u{!yE=N)N`TynkMd!PHh@4fc3c)w7pZ`an72X~vR-+BAgdw;(EN)8Mn z@;#z4tjn157FNtU=4Ix#l(pPuf~X1LJkoDjFXNpQky|4?F&buyK#~~{on$AgR~r}A z*Zp<{Atu~jh#N=D3`TQoh4oCVW-yX#Nq|B2JPOR9a0GegSol88D6;SMh= zh_a0-r4r7$DyDNKTvMuqcq71ux)tbj*YL&;&|RC`CaZ1nj+?_Cbv3O#Bvp=?MaBNj zv9ivU#hINil$A0PQke-|K@uG%*a;6^lQqKtOyJ;!y8Bm63%ygcF;DSSr8(48(= zc|UZ>37rx7c+7cHEvojXCmsx=C*ETDLQk1syF9cxc_pzF%~^bXag)fIkG@DpJx7zi f7{okBU&0qV&P;zdzGtQnA>&A~->=XRAIak%)y7#9 delta 217 zcmdm?_C&$RCBn&hi4cp;1uMbdM}Mgl`?fOLGBPkQqzEuDumWilAXZ@k(m?D2#3%SS z8i}!R)o?Q~1OOG>XWAUZa*B=7cyg|Q^yVwP3m9Xa7=T)VKnqAS18FHJ4K#@zSq`Lz y3o2)fMUK${qyp>$gucla`GpysCLd%I-)tgKz$BOkRKN*V#=rn_w!!4BLd^icNgnb5 diff --git a/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.h b/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.h index b2c82fb8..bf045a6d 100644 --- a/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.h +++ b/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.h @@ -1,11 +1,11 @@ #pragma once inline static const unsigned char rcas_cso[] = { - 0x44, 0x58, 0x42, 0x43, 0xa4, 0x12, 0x04, 0x3c, 0xd0, 0x3a, 0x11, 0xfb, - 0xc5, 0xfa, 0x24, 0x73, 0x4d, 0x85, 0x01, 0x3d, 0x01, 0x00, 0x00, 0x00, - 0x64, 0x10, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, + 0x44, 0x58, 0x42, 0x43, 0x0f, 0x79, 0xb2, 0x53, 0x3c, 0xfa, 0x1b, 0x07, + 0x88, 0x13, 0xe0, 0xc4, 0xa3, 0xea, 0x0f, 0xf1, 0x01, 0x00, 0x00, 0x00, + 0x38, 0x13, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x24, 0x04, 0x00, 0x00, 0x34, 0x04, 0x00, 0x00, 0x44, 0x04, 0x00, 0x00, - 0xc8, 0x0f, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xe8, 0x03, 0x00, 0x00, + 0x9c, 0x12, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xe8, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0x53, 0x43, 0x00, 0x01, 0x00, 0x00, 0xbd, 0x03, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00, @@ -92,8 +92,8 @@ inline static const unsigned char rcas_cso[] = { 0x00, 0xab, 0xab, 0xab, 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, 0x7c, 0x0b, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, - 0xdf, 0x02, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x04, + 0x53, 0x48, 0x45, 0x58, 0x50, 0x0e, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, + 0x94, 0x03, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00, @@ -238,117 +238,178 @@ inline static const unsigned char rcas_cso[] = { 0x2d, 0x00, 0x00, 0x89, 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x33, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x0a, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x72, 0x00, 0x10, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, - 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x0f, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, - 0x00, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x81, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x08, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, - 0x41, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x34, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, + 0x10, 0x00, 0x00, 0x0a, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x87, 0x16, 0x19, 0x3f, 0xa2, 0x45, 0x96, 0x3f, 0xd5, 0x78, 0x69, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x87, 0x16, 0x19, 0x3f, 0xa2, 0x45, 0x96, 0x3f, + 0xd5, 0x78, 0x69, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, + 0x82, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x87, 0x16, 0x19, 0x3f, + 0xa2, 0x45, 0x96, 0x3f, 0xd5, 0x78, 0x69, 0x3e, 0x00, 0x00, 0x00, 0x00, + 0x10, 0x00, 0x00, 0x0a, 0x82, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, + 0x87, 0x16, 0x19, 0x3f, 0xa2, 0x45, 0x96, 0x3f, 0xd5, 0x78, 0x69, 0x3e, + 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x0a, 0x12, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x87, 0x16, 0x19, 0x3f, 0xa2, 0x45, 0x96, 0x3f, + 0xd5, 0x78, 0x69, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a, + 0x22, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3e, + 0x3a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, + 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, - 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0xbe, - 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x81, 0x00, 0x00, 0x05, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, - 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x38, 0x00, 0x00, 0x07, 0xe2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x80, - 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x32, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x05, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x20, 0x00, 0x08, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, + 0x81, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x33, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x34, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0a, + 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x07, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, + 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x81, 0x00, 0x00, 0x05, 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0b, 0x72, 0x00, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x80, 0x3f, + 0x00, 0x00, 0x80, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0f, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, + 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x80, 0xc0, + 0x00, 0x00, 0x80, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x05, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x08, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x33, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x40, 0x41, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, - 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, 0x41, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x22, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x07, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0xbe, 0x38, 0x00, 0x00, 0x07, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0x42, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x81, 0x00, 0x00, 0x05, + 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, + 0x72, 0x00, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x05, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x07, 0x72, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x72, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x02, 0x10, 0x00, + 0x02, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x07, 0xe2, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0xf6, 0x0f, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x06, 0x06, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x08, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x80, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x2a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x08, + 0x42, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0a, 0x80, 0x20, 0x80, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, 0x82, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x41, 0x01, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, 0x22, 0x00, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, - 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x56, 0x05, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xe2, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x06, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x10, 0x00, - 0x02, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, 0xb2, 0x00, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x96, 0x0d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x05, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x06, 0xf2, 0xe0, 0x11, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x02, 0x00, 0x46, 0x0e, 0x10, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, 0x53, 0x54, 0x41, 0x54, - 0x94, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, - 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, 0x12, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x80, + 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x80, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x09, + 0x22, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x40, 0x41, + 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3f, 0x38, 0x00, 0x00, 0x07, + 0x22, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x36, 0x00, 0x00, 0x05, 0x92, 0x00, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x56, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0xe2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x0a, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x03, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x06, 0x0d, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x09, + 0xb2, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x96, 0x0d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xd6, 0x05, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x06, + 0xf2, 0xe0, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x05, 0x02, 0x00, + 0x46, 0x0e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01, + 0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x46, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, - 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x02, 0x00, 0x00, 0x00 + }; diff --git a/OptiScaler/rcas/precompile/rcas.hlsl b/OptiScaler/rcas/precompile/rcas.hlsl index 687abe92..dca73689 100644 --- a/OptiScaler/rcas/precompile/rcas.hlsl +++ b/OptiScaler/rcas/precompile/rcas.hlsl @@ -60,7 +60,7 @@ void CSMain(uint3 DTid : SV_DispatchThreadID) else if (setSharpness < 0.0f) setSharpness = 0.0f; } - + float3 e = Source.Load(int3(DTid.x, DTid.y, 0)).rgb; // skip sharpening if set value == 0 @@ -85,6 +85,12 @@ void CSMain(uint3 DTid : SV_DispatchThreadID) float fL = getRCASLuma(f); float hL = getRCASLuma(h); + // denoise + float nz = (bL + dL + fL + hL) * 0.25 - eL; + float range = max(max(max(bL, dL), max(hL, fL)), eL) - min(min(min(bL, dL), min(eL, fL)), hL); + nz = saturate(abs(nz) * rcp(range)); + nz = -0.5 * nz + 1.0; + // Min and max of ring. float3 minRGB = min(min(b, d), min(f, h)); float3 maxRGB = max(max(b, d), max(f, h)); @@ -97,7 +103,10 @@ void CSMain(uint3 DTid : SV_DispatchThreadID) float3 hitMin = minRGB * rcp(4.0 * maxRGB); float3 hitMax = (peakC.xxx - maxRGB) * rcp(4.0 * minRGB + peakC.yyy); float3 lobeRGB = max(-hitMin, hitMax); - float lobe = max(-0.1875, min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.0)) * setSharpness; + float lobe = max(-0.1875, min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.0)) * setSharpness * nz; + + // denoise + lobe *= nz; // Resolve, which needs medium precision rcp approximation to avoid visible tonality changes. float rcpL = rcp(4.0 * lobe + 1.0); diff --git a/OptiScaler/resource.h b/OptiScaler/resource.h index 7a62ee92..41a78623 100644 --- a/OptiScaler/resource.h +++ b/OptiScaler/resource.h @@ -21,7 +21,7 @@ #define VER_MAJOR_VERSION 0 #define VER_MINOR_VERSION 6 #define VER_HOTFIX_VERSION 6 -#define VER_BUILD_NUMBER 3 +#define VER_BUILD_NUMBER 4 #define VER_PRE_RELEASE