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 00000000..988ba426 Binary files /dev/null and b/OptiScaler/RCAS_Shader_Dx11.cso differ 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 bec1055e..ae322a6e 100644 Binary files a/OptiScaler/rcas/precompile/RCAS_Shader.cso and b/OptiScaler/rcas/precompile/RCAS_Shader.cso differ 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 73745a8e..988ba426 100644 Binary files a/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.cso and b/OptiScaler/rcas/precompile/RCAS_Shader_Dx11.cso differ 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