From 7608c318f953377cc93b8539a0c8e28f3649781a Mon Sep 17 00:00:00 2001 From: kindem Date: Sun, 9 Aug 2026 12:30:18 +0800 Subject: [PATCH 01/24] feat: add headless rendering sample output --- Sample/Base/Application.cpp | 57 ++++- Sample/Base/Application.h | 7 + Sample/Base/RenderTarget.cpp | 230 +++++++++++++++++++ Sample/Base/RenderTarget.h | 88 +++++++ Sample/Rendering-BaseTexture/BaseTexture.cpp | 90 +------- Sample/Rendering-SSAO/SSAOApplication.cpp | 86 +------ Sample/Rendering-Triangle/Triangle.cpp | 92 +------- 7 files changed, 411 insertions(+), 239 deletions(-) create mode 100644 Sample/Base/RenderTarget.cpp create mode 100644 Sample/Base/RenderTarget.h diff --git a/Sample/Base/Application.cpp b/Sample/Base/Application.cpp index b10662b40..94710cc47 100644 --- a/Sample/Base/Application.cpp +++ b/Sample/Base/Application.cpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -25,6 +26,8 @@ Application::Application(std::string n) , windowExtent(1024, 768) , rhiType(RHI::RHIType::vulkan) , instance(nullptr) + , headless(false) + , outputPath() , mousePos(FVec2Consts::zero) , mouseButtonsStatus() , lastTimeSeconds(TimePoint::Now().ToSeconds()) @@ -50,6 +53,8 @@ bool Application::Initialize(int argc, char* argv[]) if (const auto cli = ( clipp::option("-w").doc("window width, 1024 by default") & clipp::value("width", windowExtent.x), clipp::option("-h").doc("window height, 768 by default") & clipp::value("height", windowExtent.y), + clipp::option("-headless", "--headless").set(headless).doc("render one frame without creating a window"), + clipp::option("-output", "--output").doc("headless output image path, including extension") & clipp::value("path", outputPath), #if BUILD_CONFIG_DEBUG clipp::option("-gpuDebug").set(gpuDebug).doc("enable GPU validation layers"), #endif @@ -60,6 +65,15 @@ bool Application::Initialize(int argc, char* argv[]) return false; } + if (headless && outputPath.empty()) { + std::cerr << "headless mode requires -output with a complete image path" << std::endl; + return false; + } + if (headless && !IsSupportedSampleImageOutputPath(outputPath)) { + std::cerr << "unsupported output image extension; expected .png, .bmp, .tga, .jpg, or .jpeg" << std::endl; + return false; + } + rhiType = RHI::GetRHITypeByAbbrString(rhiString); RHI::InstanceCreateInfo instanceCreateInfo; #if BUILD_CONFIG_DEBUG @@ -72,12 +86,15 @@ bool Application::Initialize(int argc, char* argv[]) int Application::RunLoop() { - glfwInit(); - glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); - window = glfwCreateWindow(static_cast(windowExtent.x), static_cast(windowExtent.y), name.c_str(), nullptr, nullptr); + if (!headless) { + Assert(glfwInit() == GLFW_TRUE); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + window = glfwCreateWindow(static_cast(windowExtent.x), static_cast(windowExtent.y), name.c_str(), nullptr, nullptr); + Assert(window != nullptr); + } OnCreate(); - if (camera != nullptr) { + if (!headless && camera != nullptr) { auto keyCallback = [](GLFWwindow* inWindow, int key, int scancode, int action, int mods) -> void { const auto* app = static_cast(glfwGetWindowUserPointer(inWindow)); app->OnKeyActionReceived(key, action); @@ -97,7 +114,13 @@ int Application::RunLoop() glfwSetMouseButtonCallback(window, mouseButtonCallback); } - while (!static_cast(glfwWindowShouldClose(window))) { + if (headless) { + currentTimeSeconds = lastTimeSeconds; + deltaTimeSeconds = 0.0f; + OnDrawFrame(); + } + + while (!headless && !static_cast(glfwWindowShouldClose(window))) { currentTimeSeconds = TimePoint::Now().ToSeconds(); deltaTimeSeconds = static_cast(currentTimeSeconds - lastTimeSeconds); lastTimeSeconds = currentTimeSeconds; @@ -109,8 +132,10 @@ int Application::RunLoop() } OnDestroy(); - glfwDestroyWindow(window); - glfwTerminate(); + if (!headless) { + glfwDestroyWindow(window); + glfwTerminate(); + } return 0; } @@ -247,6 +272,16 @@ uint32_t Application::GetWindowHeight() const return windowExtent.y; } +bool Application::IsHeadless() const +{ + return headless; +} + +const std::string& Application::GetOutputPath() const +{ + return outputPath; +} + RHI::RHIType Application::GetRHIType() const { return rhiType; @@ -267,6 +302,14 @@ Camera& Application::GetCamera() const return *camera; } +UniquePtr Application::CreateRenderTarget(RHI::Device& device) const +{ + if (headless) { + return new HeadlessRenderTarget(device, windowExtent.x, windowExtent.y, outputPath); + } + return new SwapChainRenderTarget(device, windowExtent.x, windowExtent.y, GetPlatformWindow()); +} + Application::ShaderCompileOutput Application::CompileShader(const std::string& fileName, const std::string& entryPoint, RHI::ShaderStageBits shaderStage, std::vector includePaths) const { std::string shaderSource = FileUtils::ReadTextFile(fileName).Unwrap(); diff --git a/Sample/Base/Application.h b/Sample/Base/Application.h index 28035ed37..c43927b53 100644 --- a/Sample/Base/Application.h +++ b/Sample/Base/Application.h @@ -20,6 +20,8 @@ #include #include +class SampleRenderTarget; + class Application { public: enum class MouseButton : uint8_t { @@ -57,9 +59,12 @@ class Application { void* GetPlatformWindow() const; uint32_t GetWindowWidth() const; uint32_t GetWindowHeight() const; + bool IsHeadless() const; + const std::string& GetOutputPath() const; RHI::RHIType GetRHIType() const; RHI::Instance* GetRHIInstance() const; Camera& GetCamera() const; + UniquePtr CreateRenderTarget(RHI::Device& device) const; ShaderCompileOutput CompileShader(const std::string& fileName, const std::string& entryPoint, RHI::ShaderStageBits shaderStage, std::vector includePaths = {}) const; private: @@ -68,6 +73,8 @@ class Application { UVec2 windowExtent; RHI::RHIType rhiType; RHI::Instance* instance; + bool headless; + std::string outputPath; UniquePtr camera; FVec2 mousePos; std::array(MouseButton::max)> mouseButtonsStatus; diff --git a/Sample/Base/RenderTarget.cpp b/Sample/Base/RenderTarget.cpp new file mode 100644 index 000000000..3addd7f12 --- /dev/null +++ b/Sample/Base/RenderTarget.cpp @@ -0,0 +1,230 @@ +#include +#include +#include +#include +#include +#include +#include + +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include + +#include + +using namespace Common; +using namespace Render; +using namespace RHI; + +namespace Sample::Internal { + static std::string GetLowercaseExtension(const std::string& path) + { + auto extension = std::filesystem::path(path).extension().string(); + std::ranges::transform(extension, extension.begin(), [](const unsigned char character) -> char { return static_cast(std::tolower(character)); }); + return extension; + } + + static int WriteImage(const std::string& path, const int width, const int height, const uint8_t* pixels) + { + const auto extension = GetLowercaseExtension(path); + if (extension == ".png") { + return stbi_write_png(path.c_str(), width, height, 4, pixels, width * 4); + } + if (extension == ".bmp") { + return stbi_write_bmp(path.c_str(), width, height, 4, pixels); + } + if (extension == ".tga") { + return stbi_write_tga(path.c_str(), width, height, 4, pixels); + } + if (extension == ".jpg" || extension == ".jpeg") { + return stbi_write_jpg(path.c_str(), width, height, 4, pixels, 90); + } + return 0; + } +} + +SampleRenderTarget::SampleRenderTarget(Device& inDevice, const uint32_t inWidth, const uint32_t inHeight) + : device(inDevice) + , width(inWidth) + , height(inHeight) +{ +} + +SampleRenderTarget::~SampleRenderTarget() = default; + +SwapChainRenderTarget::SwapChainRenderTarget(Device& inDevice, const uint32_t inWidth, const uint32_t inHeight, void* inPlatformWindow) + : SampleRenderTarget(inDevice, inWidth, inHeight) + , format(PixelFormat::max) + , surface(device.CreateSurface(SurfaceCreateInfo(inPlatformWindow))) + , textures() + , textureStates() +{ +} + +SwapChainRenderTarget::~SwapChainRenderTarget() = default; + +void SwapChainRenderTarget::Initialize() +{ + static const std::array formatQualifiers = { + PixelFormat::rgba8Unorm, + PixelFormat::bgra8Unorm + }; + + for (const auto candidate : formatQualifiers) { + if (device.CheckSwapChainFormatSupport(surface.Get(), candidate, ColorSpace::srgbNonLinear)) { + format = candidate; + break; + } + } + Assert(format != PixelFormat::max); + + swapChain = device.CreateSwapChain( + SwapChainCreateInfo() + .SetFormat(format) + .SetPresentMode(PresentMode::immediately) + .SetTextureNum(backBufferCount) + .SetWidth(width) + .SetHeight(height) + .SetSurface(surface.Get()) + .SetPresentQueue(device.GetQueue(QueueType::graphics, 0))); + + for (auto i = 0; i < backBufferCount; i++) { + textures[i] = swapChain->GetTexture(i); + textureStates[i] = textures[i]->GetCreateInfo().initialState; + renderFinishedSemaphores[i] = device.CreateSemaphore(); + } + imageReadySemaphore = device.CreateSemaphore(); + frameFence = device.CreateFence(true); +} + +SampleRenderTarget::Frame SwapChainRenderTarget::Acquire() +{ + frameFence->Reset(); + const auto textureIndex = swapChain->AcquireBackTexture(imageReadySemaphore.Get()); + return { textures[textureIndex], textureStates[textureIndex], textureIndex }; +} + +void SwapChainRenderTarget::FinishRenderPass(const RGBuilder& builder, CommandRecorder& recorder, const RGTextureRef outputTexture) const +{ + recorder.ResourceBarrier(Barrier::Transition(builder.GetRHI(outputTexture), TextureState::renderTarget, TextureState::present)); +} + +void SwapChainRenderTarget::PrepareForSubmit(RGBuilder&, RGTextureRef) +{ +} + +void SwapChainRenderTarget::Execute(RGBuilder& builder, const Frame& frame) +{ + RGExecuteInfo executeInfo; + executeInfo.semaphoresToWait = { imageReadySemaphore.Get() }; + executeInfo.semaphoresToSignal = { renderFinishedSemaphores[frame.textureIndex].Get() }; + executeInfo.inFenceToSignal = frameFence.Get(); + builder.Execute(executeInfo); + + swapChain->Present(renderFinishedSemaphores[frame.textureIndex].Get()); + textureStates[frame.textureIndex] = TextureState::present; + frameFence->Wait(); +} + +PixelFormat SwapChainRenderTarget::GetFormat() const +{ + return format; +} + +HeadlessRenderTarget::HeadlessRenderTarget(Device& inDevice, const uint32_t inWidth, const uint32_t inHeight, std::string inOutputPath) + : SampleRenderTarget(inDevice, inWidth, inHeight) + , outputPath(std::move(inOutputPath)) + , textureState(TextureState::undefined) + , copyFootprint() +{ +} + +HeadlessRenderTarget::~HeadlessRenderTarget() = default; + +void HeadlessRenderTarget::Initialize() +{ + texture = device.CreateTexture( + TextureCreateInfo() + .SetType(TextureType::t2D) + .SetWidth(width) + .SetHeight(height) + .SetDepthOrArraySize(1) + .SetFormat(GetFormat()) + .SetUsages(TextureUsageBits::renderAttachment | TextureUsageBits::copySrc) + .SetMipLevels(1) + .SetSamples(1) + .SetInitialState(TextureState::renderTarget) + .SetDebugName("HeadlessOutput")); + textureState = TextureState::renderTarget; + copyFootprint = device.GetTextureSubResourceCopyFootprint(*texture, TextureSubResourceInfo()); + readbackBuffer = device.CreateBuffer( + BufferCreateInfo() + .SetSize(copyFootprint.totalBytes) + .SetUsages(BufferUsageBits::mapRead | BufferUsageBits::copyDst) + .SetInitialState(BufferState::copyDst) + .SetDebugName("HeadlessOutputReadback")); + frameFence = device.CreateFence(true); +} + +SampleRenderTarget::Frame HeadlessRenderTarget::Acquire() +{ + frameFence->Reset(); + return { texture.Get(), textureState, 0 }; +} + +void HeadlessRenderTarget::FinishRenderPass(const RGBuilder&, CommandRecorder&, RGTextureRef) const +{ +} + +void HeadlessRenderTarget::PrepareForSubmit(RGBuilder& builder, const RGTextureRef outputTexture) +{ + auto* readback = builder.ImportBuffer(readbackBuffer.Get(), BufferState::copyDst); + RGCopyPassDesc copyDesc; + copyDesc.copySrcs = { outputTexture }; + copyDesc.copyDsts = { readback }; + builder.AddCopyPass( + "ReadbackOutput", + copyDesc, + [outputTexture, readback, copyRegion = UVec3(width, height, 1)](const RGBuilder& rg, CopyPassCommandRecorder& recorder) -> void { + recorder.CopyTextureToBuffer(rg.GetRHI(outputTexture), rg.GetRHI(readback), BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, copyRegion)); + }); +} + +void HeadlessRenderTarget::Execute(RGBuilder& builder, const Frame&) +{ + RGExecuteInfo executeInfo; + executeInfo.inFenceToSignal = frameFence.Get(); + builder.Execute(executeInfo); + + textureState = TextureState::copySrc; + frameFence->Wait(); + SaveOutput(); +} + +PixelFormat HeadlessRenderTarget::GetFormat() const +{ + return PixelFormat::rgba8Unorm; +} + +void HeadlessRenderTarget::SaveOutput() const +{ + const auto rowSize = width * copyFootprint.bytesPerPixel; + std::vector pixels(rowSize * height); + const auto* mapped = static_cast(readbackBuffer->Map(MapMode::read, 0, copyFootprint.totalBytes)); + for (uint32_t row = 0; row < height; row++) { + std::memcpy(pixels.data() + row * rowSize, mapped + row * copyFootprint.rowPitch, rowSize); + } + readbackBuffer->Unmap(); + + const std::filesystem::path path(outputPath); + if (path.has_parent_path()) { + std::filesystem::create_directories(path.parent_path()); + } + Assert(Sample::Internal::WriteImage(outputPath, static_cast(width), static_cast(height), pixels.data()) != 0); + std::cout << "Saved headless output to " << std::filesystem::absolute(path).string() << std::endl; +} + +bool IsSupportedSampleImageOutputPath(const std::string& path) +{ + const auto extension = Sample::Internal::GetLowercaseExtension(path); + return extension == ".png" || extension == ".bmp" || extension == ".tga" || extension == ".jpg" || extension == ".jpeg"; +} diff --git a/Sample/Base/RenderTarget.h b/Sample/Base/RenderTarget.h new file mode 100644 index 000000000..fa489ea59 --- /dev/null +++ b/Sample/Base/RenderTarget.h @@ -0,0 +1,88 @@ +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +class SampleRenderTarget { +public: + struct Frame { + RHI::Texture* texture; + RHI::TextureState initialState; + uint8_t textureIndex; + }; + + NonCopyable(SampleRenderTarget) + virtual ~SampleRenderTarget(); + + virtual void Initialize() = 0; + virtual Frame Acquire() = 0; + virtual void FinishRenderPass(const Render::RGBuilder& builder, RHI::CommandRecorder& recorder, Render::RGTextureRef outputTexture) const = 0; + virtual void PrepareForSubmit(Render::RGBuilder& builder, Render::RGTextureRef outputTexture) = 0; + virtual void Execute(Render::RGBuilder& builder, const Frame& frame) = 0; + virtual RHI::PixelFormat GetFormat() const = 0; + +protected: + SampleRenderTarget(RHI::Device& inDevice, uint32_t inWidth, uint32_t inHeight); + + RHI::Device& device; + uint32_t width; + uint32_t height; +}; + +class SwapChainRenderTarget final : public SampleRenderTarget { +public: + NonCopyable(SwapChainRenderTarget) + SwapChainRenderTarget(RHI::Device& inDevice, uint32_t inWidth, uint32_t inHeight, void* inPlatformWindow); + ~SwapChainRenderTarget() override; + + void Initialize() override; + Frame Acquire() override; + void FinishRenderPass(const Render::RGBuilder& builder, RHI::CommandRecorder& recorder, Render::RGTextureRef outputTexture) const override; + void PrepareForSubmit(Render::RGBuilder& builder, Render::RGTextureRef outputTexture) override; + void Execute(Render::RGBuilder& builder, const Frame& frame) override; + RHI::PixelFormat GetFormat() const override; + +private: + static constexpr size_t backBufferCount = 2; + + RHI::PixelFormat format; + Common::UniquePtr surface; + Common::UniquePtr swapChain; + std::array textures; + std::array textureStates; + Common::UniquePtr imageReadySemaphore; + std::array, backBufferCount> renderFinishedSemaphores; + Common::UniquePtr frameFence; +}; + +class HeadlessRenderTarget final : public SampleRenderTarget { +public: + NonCopyable(HeadlessRenderTarget) + HeadlessRenderTarget(RHI::Device& inDevice, uint32_t inWidth, uint32_t inHeight, std::string inOutputPath); + ~HeadlessRenderTarget() override; + + void Initialize() override; + Frame Acquire() override; + void FinishRenderPass(const Render::RGBuilder& builder, RHI::CommandRecorder& recorder, Render::RGTextureRef outputTexture) const override; + void PrepareForSubmit(Render::RGBuilder& builder, Render::RGTextureRef outputTexture) override; + void Execute(Render::RGBuilder& builder, const Frame& frame) override; + RHI::PixelFormat GetFormat() const override; + +private: + void SaveOutput() const; + + std::string outputPath; + Common::UniquePtr texture; + RHI::TextureState textureState; + RHI::TextureSubResourceCopyFootprint copyFootprint; + Common::UniquePtr readbackBuffer; + Common::UniquePtr frameFence; +}; + +bool IsSupportedSampleImageOutputPath(const std::string& path); diff --git a/Sample/Rendering-BaseTexture/BaseTexture.cpp b/Sample/Rendering-BaseTexture/BaseTexture.cpp index 6ecf498b8..c96764b73 100644 --- a/Sample/Rendering-BaseTexture/BaseTexture.cpp +++ b/Sample/Rendering-BaseTexture/BaseTexture.cpp @@ -3,6 +3,7 @@ // #include +#include #define STB_IMAGE_IMPLEMENTATION #include #include @@ -60,42 +61,27 @@ class BaseTexApp final : public Application { void OnDestroy() override; private: - static constexpr size_t backBufferCount = 2; - void CreateDevice(); - void CreateSurface(); void CompileAllShaders() const; void FetchShaderInstances(); - void CreateSwapChain(); void CreateVertexAndIndexBuffer(); void CreateTextureAndSampler(); - void CreateSyncObjects(); - PixelFormat swapChainFormat; ShaderInstance vs; ShaderInstance ps; UniquePtr device; - UniquePtr surface; - UniquePtr swapChain; + UniquePtr renderTarget; UniquePtr sampler; UniquePtr vertexBuffer; UniquePtr indexBuffer; UniquePtr uniformBuffer; UniquePtr texture; UniquePtr imageBuffer; - std::array swapChainTextures; - std::array swapChainTextureStates; UniquePtr pipeline; - UniquePtr imageReadySemaphore; - std::array, backBufferCount> renderFinishedSemaphores; - UniquePtr frameFence; }; BaseTexApp::BaseTexApp(const std::string& inName) : Application(inName) - , swapChainFormat(PixelFormat::max) - , swapChainTextures() - , swapChainTextureStates() { } @@ -108,22 +94,20 @@ void BaseTexApp::OnCreate() RenderWorkerThreads::Get().Start(); CreateDevice(); - CreateSurface(); + renderTarget = CreateRenderTarget(*device); RenderThread::Get().EmplaceTask([this]() -> void { FetchShaderInstances(); - CreateSwapChain(); + renderTarget->Initialize(); CreateVertexAndIndexBuffer(); CreateTextureAndSampler(); - CreateSyncObjects(); }); } void BaseTexApp::OnDrawFrame() { RenderThread::Get().EmplaceTask([this]() -> void { - frameFence->Reset(); - const auto backTextureIndex = swapChain->AcquireBackTexture(imageReadySemaphore.Get()); + const auto frame = renderTarget->Acquire(); auto* pso = Render::PipelineCache::Get(*device).GetOrCreate( RasterPipelineStateDesc() @@ -137,11 +121,11 @@ void BaseTexApp::OnDrawFrame() .AddAttribute(RVertexAttribute(RVertexBinding("TEXCOORD", 0), VertexFormat::float32X2, offsetof(Vertex, uv))))) .SetFragmentState( RFragmentState() - .AddColorTarget(ColorTargetState(swapChainFormat, ColorWriteBits::all, false))) + .AddColorTarget(ColorTargetState(renderTarget->GetFormat(), ColorWriteBits::all, false))) .SetPrimitiveState(PrimitiveState(PrimitiveTopologyType::triangle, FillMode::solid, IndexFormat::uint16, FrontFace::ccw, CullMode::none))); RGBuilder builder(*device); - auto* backTexture = builder.ImportTexture(swapChainTextures[backTextureIndex], swapChainTextureStates[backTextureIndex]); + auto* backTexture = builder.ImportTexture(frame.texture, frame.initialState); auto* backTextureView = builder.CreateTextureView(backTexture, RGTextureViewDesc(TextureViewType::colorAttachment, TextureViewDimension::tv2D)); auto* vBuffer = builder.ImportBuffer(vertexBuffer.Get(), BufferState::shaderReadOnly); auto* vBufferView = builder.CreateBufferView(vBuffer, RGBufferViewDesc(BufferViewType::vertex, vBuffer->GetDesc().size, 0, VertexBufferViewInfo(sizeof(Vertex)))); @@ -181,18 +165,12 @@ void BaseTexApp::OnDrawFrame() recorder.DrawIndexed(6, 1, 0, 0, 0); }, {}, - [backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { - recorder.ResourceBarrier(Barrier::Transition(rg.GetRHI(backTexture), TextureState::renderTarget, TextureState::present)); + [this, backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { + renderTarget->FinishRenderPass(rg, recorder, backTexture); }); - RGExecuteInfo executeInfo; - executeInfo.semaphoresToWait = { imageReadySemaphore.Get() }; - executeInfo.semaphoresToSignal = { renderFinishedSemaphores[backTextureIndex].Get() }; - executeInfo.inFenceToSignal = frameFence.Get(); - builder.Execute(executeInfo); - swapChain->Present(renderFinishedSemaphores[backTextureIndex].Get()); - swapChainTextureStates[backTextureIndex] = TextureState::present; - frameFence->Wait(); + renderTarget->PrepareForSubmit(builder, backTexture); + renderTarget->Execute(builder, frame); Core::ThreadContext::IncFrameNumber(); BufferPool::Get(*device).Forfeit(); @@ -212,6 +190,7 @@ void BaseTexApp::OnDestroy() device->GetQueue(QueueType::graphics, 0)->Flush(fence.Get()); fence->Wait(); + renderTarget = nullptr; DestroyDeviceResources(*device); }); RenderThread::Get().Flush(); @@ -229,11 +208,6 @@ void BaseTexApp::CreateDevice() .AddQueueRequest(QueueRequestInfo(QueueType::graphics, 1))); } -void BaseTexApp::CreateSurface() -{ - surface = device->CreateSurface(SurfaceCreateInfo(GetPlatformWindow())); -} - void BaseTexApp::CompileAllShaders() const { ShaderCompileOptions options; @@ -252,37 +226,6 @@ void BaseTexApp::FetchShaderInstances() ps = ShaderMap::Get(*device).GetShaderInstance(BaseTexPS::Get(), {}); } -void BaseTexApp::CreateSwapChain() -{ - static std::vector swapChainFormatQualifiers = { - PixelFormat::rgba8Unorm, - PixelFormat::bgra8Unorm - }; - - for (const auto format : swapChainFormatQualifiers) { - if (device->CheckSwapChainFormatSupport(surface.Get(), format, ColorSpace::srgbNonLinear)) { - swapChainFormat = format; - break; - } - } - Assert(swapChainFormat != PixelFormat::max); - - swapChain = device->CreateSwapChain( - SwapChainCreateInfo() - .SetFormat(swapChainFormat) - .SetPresentMode(PresentMode::immediately) - .SetTextureNum(backBufferCount) - .SetWidth(GetWindowWidth()) - .SetHeight(GetWindowHeight()) - .SetSurface(surface.Get()) - .SetPresentQueue(device->GetQueue(QueueType::graphics, 0))); - - for (auto i = 0; i < backBufferCount; i++) { - swapChainTextures[i] = swapChain->GetTexture(i); - swapChainTextureStates[i] = swapChainTextures[i]->GetCreateInfo().initialState; - } -} - void BaseTexApp::CreateVertexAndIndexBuffer() { const std::vector vertices = { @@ -386,15 +329,6 @@ void BaseTexApp::CreateTextureAndSampler() fence->Wait(); } -void BaseTexApp::CreateSyncObjects() -{ - imageReadySemaphore = device->CreateSemaphore(); - for (auto i = 0; i < backBufferCount; i++) { - renderFinishedSemaphores[i] = device->CreateSemaphore(); - } - frameFence = device->CreateFence(true); -} - int main(int argc, char* argv[]) { BaseTexApp application("Rendering-BaseTex"); diff --git a/Sample/Rendering-SSAO/SSAOApplication.cpp b/Sample/Rendering-SSAO/SSAOApplication.cpp index cc3612b2f..d3967d002 100644 --- a/Sample/Rendering-SSAO/SSAOApplication.cpp +++ b/Sample/Rendering-SSAO/SSAOApplication.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -141,15 +142,14 @@ class SSAOApp final : public Application { RenderWorkerThreads::Get().Start(); CreateDevice(); - CreateSurface(); + renderTarget = CreateRenderTarget(*device); RenderThread::Get().EmplaceTask([this]() -> void { FetchShaderInstances(); - CreateSwapChain(); + renderTarget->Initialize(); CreateVertexAndIndexBuffer(); CreateQuadBuffer(); CreateSamplers(); - CreateSyncObjects(); PrepareGBuffer(); PrepareSSAOTextures(); PrepareUniformBuffers(); @@ -164,8 +164,7 @@ class SSAOApp final : public Application { uboSceneParams.view = GetCamera().GetViewMatrix(); RenderThread::Get().EmplaceTask([this]() -> void { - frameFence->Reset(); - const auto backTextureIndex = swapChain->AcquireBackTexture(imageReadySemaphore.Get()); + const auto frame = renderTarget->Acquire(); if (uniformBuffers.sceneParams) { auto* uboData = uniformBuffers.sceneParams->Map(MapMode::write, 0, sizeof(UBOSceneParams)); @@ -175,7 +174,7 @@ class SSAOApp final : public Application { RGBuilder builder(*device); - auto* backTexture = builder.ImportTexture(swapChainTextures[backTextureIndex], swapChainTextureStates[backTextureIndex]); + auto* backTexture = builder.ImportTexture(frame.texture, frame.initialState); auto* backTextureView = builder.CreateTextureView(backTexture, RGTextureViewDesc(TextureViewType::colorAttachment, TextureViewDimension::tv2D)); auto* gBufferPos = builder.ImportTexture(gBufferPosTex.Get(), TextureState::shaderReadOnly); @@ -372,7 +371,7 @@ class SSAOApp final : public Application { .AddAttribute(RVertexAttribute(RVertexBinding("TEXCOORD", 0), VertexFormat::float32X2, offsetof(QuadVertex, uv))))) .SetFragmentState( RFragmentState() - .AddColorTarget(ColorTargetState(swapChainFormat, ColorWriteBits::all, false))) + .AddColorTarget(ColorTargetState(renderTarget->GetFormat(), ColorWriteBits::all, false))) .SetPrimitiveState(PrimitiveState(PrimitiveTopologyType::triangle, FillMode::solid, IndexFormat::uint32, FrontFace::ccw, CullMode::none))); auto* compositionBindGroup = builder.AllocateBindGroup( @@ -401,19 +400,12 @@ class SSAOApp final : public Application { recorder.DrawIndexed(6, 1, 0, 0, 0); }, {}, - [backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { - recorder.ResourceBarrier(Barrier::Transition(rg.GetRHI(backTexture), TextureState::renderTarget, TextureState::present)); + [this, backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { + renderTarget->FinishRenderPass(rg, recorder, backTexture); }); - RGExecuteInfo executeInfo; - executeInfo.semaphoresToWait = { imageReadySemaphore.Get() }; - executeInfo.semaphoresToSignal = { renderFinishedSemaphores[backTextureIndex].Get() }; - executeInfo.inFenceToSignal = frameFence.Get(); - builder.Execute(executeInfo); - - swapChain->Present(renderFinishedSemaphores[backTextureIndex].Get()); - swapChainTextureStates[backTextureIndex] = TextureState::present; - frameFence->Wait(); + renderTarget->PrepareForSubmit(builder, backTexture); + renderTarget->Execute(builder, frame); Core::ThreadContext::IncFrameNumber(); BufferPool::Get(*device).Forfeit(); @@ -432,6 +424,7 @@ class SSAOApp final : public Application { device->GetQueue(QueueType::graphics, 0)->Flush(fence.Get()); fence->Wait(); + renderTarget = nullptr; DestroyDeviceResources(*device); }); RenderThread::Get().Flush(); @@ -443,9 +436,6 @@ class SSAOApp final : public Application { private: static constexpr uint8_t ssaoKernelSize = 64; static constexpr uint8_t ssaoNoiseDim = 16; - static constexpr size_t backBufferCount = 2; - - PixelFormat swapChainFormat = PixelFormat::max; // Shader instances ShaderInstance gBufferVS; @@ -459,10 +449,7 @@ class SSAOApp final : public Application { // Resources UniquePtr device; - UniquePtr surface; - UniquePtr swapChain; - std::array swapChainTextures; - std::array swapChainTextureStates; + UniquePtr renderTarget; UniquePtr vertexBuffer; UniquePtr indexBuffer; @@ -480,10 +467,6 @@ class SSAOApp final : public Application { UniquePtr sampler; UniquePtr noiseSampler; - UniquePtr imageReadySemaphore; - std::array, backBufferCount> renderFinishedSemaphores; - UniquePtr frameFence; - // Uniform buffers struct { UniquePtr sceneParams; @@ -533,11 +516,6 @@ class SSAOApp final : public Application { .AddQueueRequest(QueueRequestInfo(QueueType::graphics, 1))); } - void CreateSurface() - { - surface = device->CreateSurface(SurfaceCreateInfo(GetPlatformWindow())); - } - void FetchShaderInstances() { ShaderArtifactRegistry::Get().PerformThreadCopy(); @@ -551,37 +529,6 @@ class SSAOApp final : public Application { compositionPS = ShaderMap::Get(*device).GetShaderInstance(CompositionPS::Get(), {}); } - void CreateSwapChain() - { - static std::vector swapChainFormatQualifiers = { - PixelFormat::rgba8Unorm, - PixelFormat::bgra8Unorm - }; - - for (const auto format : swapChainFormatQualifiers) { - if (device->CheckSwapChainFormatSupport(surface.Get(), format, ColorSpace::srgbNonLinear)) { - swapChainFormat = format; - break; - } - } - Assert(swapChainFormat != PixelFormat::max); - - swapChain = device->CreateSwapChain( - SwapChainCreateInfo() - .SetFormat(swapChainFormat) - .SetPresentMode(PresentMode::immediately) - .SetTextureNum(backBufferCount) - .SetWidth(GetWindowWidth()) - .SetHeight(GetWindowHeight()) - .SetSurface(surface.Get()) - .SetPresentQueue(device->GetQueue(QueueType::graphics, 0))); - - for (auto i = 0; i < backBufferCount; i++) { - swapChainTextures[i] = swapChain->GetTexture(i); - swapChainTextureStates[i] = swapChainTextures[i]->GetCreateInfo().initialState; - } - } - void CreateVertexAndIndexBuffer() { if (!model) return; @@ -663,15 +610,6 @@ class SSAOApp final : public Application { .SetAddressModeV(AddressMode::repeat)); } - void CreateSyncObjects() - { - imageReadySemaphore = device->CreateSemaphore(); - for (auto i = 0; i < backBufferCount; i++) { - renderFinishedSemaphores[i] = device->CreateSemaphore(); - } - frameFence = device->CreateFence(true); - } - void PrepareGBuffer() { // Position buffer (RGBA32F) diff --git a/Sample/Rendering-Triangle/Triangle.cpp b/Sample/Rendering-Triangle/Triangle.cpp index 46fb3b7d7..f9ecd5226 100644 --- a/Sample/Rendering-Triangle/Triangle.cpp +++ b/Sample/Rendering-Triangle/Triangle.cpp @@ -3,6 +3,7 @@ // #include +#include #include #include #include @@ -57,35 +58,20 @@ class TriangleApplication final : public Application { void OnDestroy() override; private: - static constexpr size_t backBufferCount = 2; - void CreateDevice(); void CompileAllShaders() const; void FetchShaderInstances(); - void CreateSurface(); - void CreateSwapChain(); void CreateTriangleVertexBuffer(); - void CreateSyncObjects(); - PixelFormat swapChainFormat; ShaderInstance triangleVS; ShaderInstance trianglePS; UniquePtr device; - UniquePtr surface; - UniquePtr swapChain; - std::array swapChainTextures; - std::array swapChainTextureStates; + UniquePtr renderTarget; UniquePtr triangleVertexBuffer; - UniquePtr imageReadySemaphore; - std::array, backBufferCount> renderFinishedSemaphores; - UniquePtr frameFence; }; TriangleApplication::TriangleApplication(const std::string& inName) : Application(inName) - , swapChainFormat(PixelFormat::max) - , swapChainTextures() - , swapChainTextureStates() { } @@ -97,24 +83,20 @@ void TriangleApplication::OnCreate() RenderThread::Get().Start(); RenderWorkerThreads::Get().Start(); - // NOTICE: some platform surface need created on main thread, like NSView* in macOS - // so we create device and surface in main thread early CreateDevice(); - CreateSurface(); + renderTarget = CreateRenderTarget(*device); RenderThread::Get().EmplaceTask([this]() -> void { FetchShaderInstances(); - CreateSwapChain(); + renderTarget->Initialize(); CreateTriangleVertexBuffer(); - CreateSyncObjects(); }); } void TriangleApplication::OnDrawFrame() { RenderThread::Get().EmplaceTask([this]() -> void { - frameFence->Reset(); - const auto backTextureIndex = swapChain->AcquireBackTexture(imageReadySemaphore.Get()); + const auto frame = renderTarget->Acquire(); auto* pso = Render::PipelineCache::Get(*device).GetOrCreate( RasterPipelineStateDesc() @@ -127,10 +109,10 @@ void TriangleApplication::OnDrawFrame() .AddAttribute(RVertexAttribute(RVertexBinding("POSITION", 0), VertexFormat::float32X3, offsetof(Vertex, position))))) .SetFragmentState( RFragmentState() - .AddColorTarget(ColorTargetState(swapChainFormat, ColorWriteBits::all, false)))); + .AddColorTarget(ColorTargetState(renderTarget->GetFormat(), ColorWriteBits::all, false)))); RGBuilder builder(*device); - auto* backTexture = builder.ImportTexture(swapChainTextures[backTextureIndex], swapChainTextureStates[backTextureIndex]); + auto* backTexture = builder.ImportTexture(frame.texture, frame.initialState); auto* backTextureView = builder.CreateTextureView(backTexture, RGTextureViewDesc(TextureViewType::colorAttachment, TextureViewDimension::tv2D)); auto* vertexBuffer = builder.ImportBuffer(triangleVertexBuffer.Get(), BufferState::shaderReadOnly); auto* vertexBufferView = builder.CreateBufferView(vertexBuffer, RGBufferViewDesc(BufferViewType::vertex, vertexBuffer->GetDesc().size, 0, VertexBufferViewInfo(sizeof(Vertex)))); @@ -166,18 +148,12 @@ void TriangleApplication::OnDrawFrame() recorder.Draw(3, 1, 0, 0); }, {}, - [backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { - recorder.ResourceBarrier(Barrier::Transition(rg.GetRHI(backTexture), TextureState::renderTarget, TextureState::present)); + [this, backTexture](const RGBuilder& rg, CommandRecorder& recorder) -> void { + renderTarget->FinishRenderPass(rg, recorder, backTexture); }); - RGExecuteInfo executeInfo; - executeInfo.semaphoresToWait = { imageReadySemaphore.Get() }; - executeInfo.semaphoresToSignal = { renderFinishedSemaphores[backTextureIndex].Get() }; - executeInfo.inFenceToSignal = frameFence.Get(); - builder.Execute(executeInfo); - swapChain->Present(renderFinishedSemaphores[backTextureIndex].Get()); - swapChainTextureStates[backTextureIndex] = TextureState::present; - frameFence->Wait(); + renderTarget->PrepareForSubmit(builder, backTexture); + renderTarget->Execute(builder, frame); Core::ThreadContext::IncFrameNumber(); BufferPool::Get(*device).Forfeit(); @@ -197,6 +173,7 @@ void TriangleApplication::OnDestroy() device->GetQueue(QueueType::graphics, 0)->Flush(fence.Get()); fence->Wait(); + renderTarget = nullptr; DestroyDeviceResources(*device); }); RenderThread::Get().Flush(); @@ -232,42 +209,6 @@ void TriangleApplication::FetchShaderInstances() trianglePS = ShaderMap::Get(*device).GetShaderInstance(TrianglePS::Get(), {}); } -void TriangleApplication::CreateSurface() -{ - surface = device->CreateSurface(SurfaceCreateInfo(GetPlatformWindow())); -} - -void TriangleApplication::CreateSwapChain() -{ - static std::vector swapChainFormatQualifiers = { - PixelFormat::rgba8Unorm, - PixelFormat::bgra8Unorm - }; - - for (const auto format : swapChainFormatQualifiers) { - if (device->CheckSwapChainFormatSupport(surface.Get(), format, ColorSpace::srgbNonLinear)) { - swapChainFormat = format; - break; - } - } - Assert(swapChainFormat != PixelFormat::max); - - swapChain = device->CreateSwapChain( - SwapChainCreateInfo() - .SetFormat(swapChainFormat) - .SetPresentMode(PresentMode::immediately) - .SetTextureNum(backBufferCount) - .SetWidth(GetWindowWidth()) - .SetHeight(GetWindowHeight()) - .SetSurface(surface.Get()) - .SetPresentQueue(device->GetQueue(QueueType::graphics, 0))); - - for (auto i = 0; i < backBufferCount; i++) { - swapChainTextures[i] = swapChain->GetTexture(i); - swapChainTextureStates[i] = swapChainTextures[i]->GetCreateInfo().initialState; - } -} - void TriangleApplication::CreateTriangleVertexBuffer() { const std::vector vertices = { @@ -290,15 +231,6 @@ void TriangleApplication::CreateTriangleVertexBuffer() } } -void TriangleApplication::CreateSyncObjects() -{ - imageReadySemaphore = device->CreateSemaphore(); - for (auto i = 0; i < backBufferCount; i++) { - renderFinishedSemaphores[i] = device->CreateSemaphore(); - } - frameFence = device->CreateFence(true); -} - int main(int argc, char* argv[]) { TriangleApplication application("Rendering-Triangle"); From ca909f28ebd4e7346a2ca327bae5af7440e94285 Mon Sep 17 00:00:00 2001 From: kindem Date: Sun, 9 Aug 2026 18:37:57 +0800 Subject: [PATCH 02/24] feat: hide name component in editor details --- Editor/Src/Frame/EditorFrame.cpp | 15 ++++++++++++++- .../Runtime/Include/Runtime/Component/Name.h | 2 +- Engine/Source/Runtime/Include/Runtime/Meta.h | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/Editor/Src/Frame/EditorFrame.cpp b/Editor/Src/Frame/EditorFrame.cpp index 9134b2149..af1139d4f 100644 --- a/Editor/Src/Frame/EditorFrame.cpp +++ b/Editor/Src/Frame/EditorFrame.cpp @@ -33,6 +33,11 @@ namespace Editor::Internal { : qualifiedName.substr(namespaceSeparator + 2); } + static bool IsComponentVisibleInDetails(const Mirror::Class& inClass) + { + return !inClass.HasMeta(Runtime::MetaPresets::editorHide); + } + static std::string EntityDisplayName(const Runtime::ECRegistry& inRegistry, Runtime::Entity inEntity) { const auto* name = inRegistry.Find(inEntity); @@ -69,7 +74,9 @@ namespace Editor { .log = true } { - std::erase_if(componentClasses, [](Runtime::CompClass clazz) -> bool { return !clazz->HasMeta("comp"); }); + std::erase_if(componentClasses, [](Runtime::CompClass clazz) -> bool { + return !clazz->HasMeta("comp") || !Internal::IsComponentVisibleInDetails(*clazz); + }); std::ranges::sort(componentClasses, [](Runtime::CompClass lhs, Runtime::CompClass rhs) -> bool { return lhs->GetName() < rhs->GetName(); }); @@ -253,6 +260,9 @@ namespace Editor { Runtime::CompClass componentToRemove = nullptr; inRegistry.CompEach(selectedEntity, [&](Runtime::CompClass compClass) -> void { + if (!Internal::IsComponentVisibleInDetails(*compClass)) { + return; + } ImGui::PushID(compClass->GetName().c_str()); const std::string componentName = Internal::ComponentDisplayName(*compClass); const std::string componentLabel = Widgets::Label(Icons::Tabler::boxMultiple, componentName); @@ -277,6 +287,9 @@ namespace Editor { ImGui::PopID(); }); inRegistry.TagEach(selectedEntity, [&](Runtime::TagClass tagClass) -> void { + if (!Internal::IsComponentVisibleInDetails(*tagClass)) { + return; + } ImGui::PushID(tagClass->GetName().c_str()); const std::string tagName = Internal::ComponentDisplayName(*tagClass); const std::string tagLabel = Widgets::Label(Icons::Tabler::box, tagName); diff --git a/Engine/Source/Runtime/Include/Runtime/Component/Name.h b/Engine/Source/Runtime/Include/Runtime/Component/Name.h index cd45897a8..0b6290bb2 100644 --- a/Engine/Source/Runtime/Include/Runtime/Component/Name.h +++ b/Engine/Source/Runtime/Include/Runtime/Component/Name.h @@ -10,7 +10,7 @@ #include namespace Runtime { - struct RUNTIME_API EClass(comp) Name final { + struct RUNTIME_API EClass(comp, editorHide) Name final { EClassBody(Name) Name(); diff --git a/Engine/Source/Runtime/Include/Runtime/Meta.h b/Engine/Source/Runtime/Include/Runtime/Meta.h index f2d08aace..ab9c5e5ba 100644 --- a/Engine/Source/Runtime/Include/Runtime/Meta.h +++ b/Engine/Source/Runtime/Include/Runtime/Meta.h @@ -9,6 +9,7 @@ namespace Runtime { struct RUNTIME_API MetaPresets { + static constexpr const auto* editorHide = "editorHide"; static constexpr const auto* globalComp = "globalComp"; static constexpr const auto* gameReadOnly = "gameReadOnly"; static constexpr const auto* tag = "tag"; From eacfabfabce638a00ec877e312c7dcc864008a80 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 11:18:42 +0800 Subject: [PATCH 03/24] fix: share immutable shader bytecode storage --- .../Include/RHI/DirectX12/ShaderModule.h | 4 +- .../Source/RHI-DirectX12/Src/ShaderModule.cpp | 7 +- Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp | 8 ++- Engine/Source/RHI/Include/RHI/ShaderModule.h | 33 +++++++-- Engine/Source/RHI/Src/ShaderModule.cpp | 72 ++++++++++++++++--- Engine/Source/Render/Include/Render/Shader.h | 2 +- .../Render/Include/Render/ShaderCompiler.h | 2 +- Engine/Source/Render/Src/ShaderCompiler.cpp | 6 +- Sample/Base/Application.h | 2 +- 9 files changed, 109 insertions(+), 27 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/ShaderModule.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/ShaderModule.h index 45e082e25..5e24ebd5b 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/ShaderModule.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/ShaderModule.h @@ -17,10 +17,10 @@ namespace RHI::DirectX12 { const std::string& GetEntryPoint() override; - const D3D12_SHADER_BYTECODE& GetNative() const; + D3D12_SHADER_BYTECODE GetNative() const; private: - CD3DX12_SHADER_BYTECODE nativeShaderBytecode; + ShaderByteCodeRef byteCode; std::string entryPoint; }; } diff --git a/Engine/Source/RHI-DirectX12/Src/ShaderModule.cpp b/Engine/Source/RHI-DirectX12/Src/ShaderModule.cpp index 20d94d767..9db25c6ec 100644 --- a/Engine/Source/RHI-DirectX12/Src/ShaderModule.cpp +++ b/Engine/Source/RHI-DirectX12/Src/ShaderModule.cpp @@ -7,9 +7,10 @@ namespace RHI::DirectX12 { DX12ShaderModule::DX12ShaderModule(const ShaderModuleCreateInfo& inCreateInfo) : ShaderModule(inCreateInfo) - , nativeShaderBytecode(inCreateInfo.byteCode, inCreateInfo.size) + , byteCode(inCreateInfo.byteCode) , entryPoint(inCreateInfo.entryPoint) { + Assert(byteCode != nullptr); } DX12ShaderModule::~DX12ShaderModule() = default; @@ -19,8 +20,8 @@ namespace RHI::DirectX12 { return entryPoint; } - const D3D12_SHADER_BYTECODE& DX12ShaderModule::GetNative() const + D3D12_SHADER_BYTECODE DX12ShaderModule::GetNative() const { - return nativeShaderBytecode; + return CD3DX12_SHADER_BYTECODE(byteCode->GetData(), byteCode->GetSize()); } } diff --git a/Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp b/Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp index 6b3d53bc1..6c6a68797 100644 --- a/Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp +++ b/Engine/Source/RHI-Vulkan/Src/ShaderModule.cpp @@ -37,11 +37,13 @@ namespace RHI::Vulkan { void VulkanShaderModule::CreateNativeShaderModule(const ShaderModuleCreateInfo& createInfo) { + Assert(createInfo.byteCode != nullptr); + VkShaderModuleCreateInfo moduleCreateInfo = {}; moduleCreateInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; - moduleCreateInfo.codeSize = createInfo.size; - moduleCreateInfo.pCode = static_cast(createInfo.byteCode); + moduleCreateInfo.codeSize = createInfo.byteCode->GetSize(); + moduleCreateInfo.pCode = static_cast(createInfo.byteCode->GetData()); Assert(vkCreateShaderModule(device.GetNative(), &moduleCreateInfo, nullptr, &nativeShaderModule) == VK_SUCCESS); } -} \ No newline at end of file +} diff --git a/Engine/Source/RHI/Include/RHI/ShaderModule.h b/Engine/Source/RHI/Include/RHI/ShaderModule.h index 16a72d86b..f3b76dde1 100644 --- a/Engine/Source/RHI/Include/RHI/ShaderModule.h +++ b/Engine/Source/RHI/Include/RHI/ShaderModule.h @@ -7,19 +7,40 @@ #include #include +#include #include namespace RHI { + class ShaderByteCode final { + public: + NonCopyable(ShaderByteCode) + explicit ShaderByteCode(const void* inData, size_t inSize); + explicit ShaderByteCode(const std::vector& inData); + explicit ShaderByteCode(std::vector&& inData); + ~ShaderByteCode(); + + const void* GetData() const; + size_t GetSize() const; + + private: + std::vector data; + }; + + using ShaderByteCodeRef = Common::SharedPtr; + struct ShaderModuleCreateInfo { std::string entryPoint; - const void* byteCode; - size_t size; + ShaderByteCodeRef byteCode; - explicit ShaderModuleCreateInfo(const std::string& inEntryPoint = "", const void* inByteCode = nullptr, size_t inSize = 0); - explicit ShaderModuleCreateInfo(const std::string& inEntryPoint = "", const std::vector& inByteCode = {}); + explicit ShaderModuleCreateInfo(const std::string& inEntryPoint = "", ShaderByteCodeRef inByteCode = {}); + explicit ShaderModuleCreateInfo(const std::string& inEntryPoint, const void* inByteCode, size_t inSize); + explicit ShaderModuleCreateInfo(const std::string& inEntryPoint, const std::vector& inByteCode); + explicit ShaderModuleCreateInfo(const std::string& inEntryPoint, std::vector&& inByteCode); - ShaderModuleCreateInfo& SetByteCode(const void* inByteCode); - ShaderModuleCreateInfo& SetSize(size_t inSize); + ShaderModuleCreateInfo& SetByteCode(ShaderByteCodeRef inByteCode); + ShaderModuleCreateInfo& SetByteCode(const void* inByteCode, size_t inSize); + ShaderModuleCreateInfo& SetByteCode(const std::vector& inByteCode); + ShaderModuleCreateInfo& SetByteCode(std::vector&& inByteCode); }; class ShaderModule { diff --git a/Engine/Source/RHI/Src/ShaderModule.cpp b/Engine/Source/RHI/Src/ShaderModule.cpp index c37eb97ad..09910c3aa 100644 --- a/Engine/Source/RHI/Src/ShaderModule.cpp +++ b/Engine/Source/RHI/Src/ShaderModule.cpp @@ -2,32 +2,88 @@ // Created by johnk on 19/2/2022. // +#include +#include + #include namespace RHI { + ShaderByteCode::ShaderByteCode(const void* inData, const size_t inSize) + : data(inSize) + { + Assert(inData != nullptr || inSize == 0); + if (inSize > 0) { + std::memcpy(data.data(), inData, inSize); + } + } + + ShaderByteCode::ShaderByteCode(const std::vector& inData) + : data(inData) + { + } + + ShaderByteCode::ShaderByteCode(std::vector&& inData) + : data(std::move(inData)) + { + } + + ShaderByteCode::~ShaderByteCode() = default; + + const void* ShaderByteCode::GetData() const + { + return data.data(); + } + + size_t ShaderByteCode::GetSize() const + { + return data.size(); + } + + ShaderModuleCreateInfo::ShaderModuleCreateInfo(const std::string& inEntryPoint, ShaderByteCodeRef inByteCode) + : entryPoint(inEntryPoint) + , byteCode(std::move(inByteCode)) + { + } + ShaderModuleCreateInfo::ShaderModuleCreateInfo(const std::string& inEntryPoint, const void* inByteCode, const size_t inSize) : entryPoint(inEntryPoint) - , byteCode(inByteCode) - , size(inSize) + , byteCode(Common::MakeShared(inByteCode, inSize)) { } ShaderModuleCreateInfo::ShaderModuleCreateInfo(const std::string& inEntryPoint, const std::vector& inByteCode) : entryPoint(inEntryPoint) - , byteCode(inByteCode.data()) - , size(inByteCode.size()) + , byteCode(Common::MakeShared(inByteCode)) + { + } + + ShaderModuleCreateInfo::ShaderModuleCreateInfo(const std::string& inEntryPoint, std::vector&& inByteCode) + : entryPoint(inEntryPoint) + , byteCode(Common::MakeShared(std::move(inByteCode))) { } - ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(const void* inByteCode) + ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(ShaderByteCodeRef inByteCode) + { + byteCode = std::move(inByteCode); + return *this; + } + + ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(const void* inByteCode, const size_t inSize) + { + byteCode = Common::MakeShared(inByteCode, inSize); + return *this; + } + + ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(const std::vector& inByteCode) { - byteCode = inByteCode; + byteCode = Common::MakeShared(inByteCode); return *this; } - ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetSize(const size_t inSize) + ShaderModuleCreateInfo& ShaderModuleCreateInfo::SetByteCode(std::vector&& inByteCode) { - size = inSize; + byteCode = Common::MakeShared(std::move(inByteCode)); return *this; } diff --git a/Engine/Source/Render/Include/Render/Shader.h b/Engine/Source/Render/Include/Render/Shader.h index 9c4d7737c..6cd17054e 100644 --- a/Engine/Source/Render/Include/Render/Shader.h +++ b/Engine/Source/Render/Include/Render/Shader.h @@ -306,7 +306,7 @@ namespace Render { struct ShaderVariantArtifact { std::string entryPoint; - std::vector byteCode; + RHI::ShaderByteCodeRef byteCode; ShaderReflectionData reflectionData; }; diff --git a/Engine/Source/Render/Include/Render/ShaderCompiler.h b/Engine/Source/Render/Include/Render/ShaderCompiler.h index 83b9076aa..c19a9685e 100644 --- a/Engine/Source/Render/Include/Render/ShaderCompiler.h +++ b/Engine/Source/Render/Include/Render/ShaderCompiler.h @@ -35,7 +35,7 @@ namespace Render { struct ShaderCompileOutput { bool success; std::string entryPoint; - std::vector byteCode; + RHI::ShaderByteCodeRef byteCode; ShaderReflectionData reflectionData; std::string errorInfo; }; diff --git a/Engine/Source/Render/Src/ShaderCompiler.cpp b/Engine/Source/Render/Src/ShaderCompiler.cpp index abe08b64a..d7f4bc016 100644 --- a/Engine/Source/Render/Src/ShaderCompiler.cpp +++ b/Engine/Source/Render/Src/ShaderCompiler.cpp @@ -321,8 +321,8 @@ namespace Render { output.success = true; const auto* codeStart = static_cast(codeBlob->GetBufferPointer()); const auto* codeEnd = codeStart + codeBlob->GetBufferSize(); + std::vector byteCode(codeStart, codeEnd); output.entryPoint = input.entryPoint; - output.byteCode = std::vector(codeStart, codeEnd); if (options.byteCodeType == ShaderByteCodeType::dxil) { #if PLATFORM_WINDOWS @@ -339,9 +339,11 @@ namespace Render { BuildHlslReflectionData(shaderReflection, output.reflectionData); #endif } else { - const spirv_cross::Compiler sprivCrossCompiler(reinterpret_cast(output.byteCode.data()), output.byteCode.size() * sizeof(uint8_t) / sizeof(uint32_t)); + const spirv_cross::Compiler sprivCrossCompiler(reinterpret_cast(byteCode.data()), byteCode.size() * sizeof(uint8_t) / sizeof(uint32_t)); BuildGlslReflectionData(sprivCrossCompiler, output.reflectionData); } + + output.byteCode = Common::MakeShared(std::move(byteCode)); } } diff --git a/Sample/Base/Application.h b/Sample/Base/Application.h index c43927b53..44993d7a1 100644 --- a/Sample/Base/Application.h +++ b/Sample/Base/Application.h @@ -32,7 +32,7 @@ class Application { }; struct ShaderCompileOutput { - std::vector byteCode; + RHI::ShaderByteCodeRef byteCode; Render::ShaderReflectionData reflectionData; }; From 89b0f257719b06e7050deaee6cbb519ab6a68837 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 11:33:43 +0800 Subject: [PATCH 04/24] fix: make RHI modules own instance lifetime --- Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h | 1 - Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp | 4 +++- Engine/Source/RHI-DirectX12/Src/Instance.cpp | 4 ---- Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h | 1 - Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp | 4 +++- Engine/Source/RHI-Dummy/Src/Instance.cpp | 4 ---- Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h | 1 - Engine/Source/RHI-Vulkan/Src/Instance.cpp | 4 ---- Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp | 4 +++- Engine/Source/RHI/Include/RHI/Instance.h | 1 - 10 files changed, 9 insertions(+), 19 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h index c7e9a9fc6..bec182e5f 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Instance.h @@ -37,7 +37,6 @@ namespace RHI::DirectX12 { RHIType GetRHIType() override; uint32_t GetGpuNum() override; Gpu* GetGpu(uint32_t index) override; - void Destroy() override; IDXGIFactory4* GetNative() const; #if BUILD_CONFIG_DEBUG diff --git a/Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp b/Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp index 884413c67..bcabf420b 100644 --- a/Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp +++ b/Engine/Source/RHI-DirectX12/Src/DX12RHIModule.cpp @@ -17,7 +17,9 @@ namespace RHI::DirectX12 { void DX12RHIModule::OnUnload() { - delete gInstance; + auto* instance = gInstance; + gInstance = nullptr; + delete instance; } Core::ModuleType DX12RHIModule::Type() const diff --git a/Engine/Source/RHI-DirectX12/Src/Instance.cpp b/Engine/Source/RHI-DirectX12/Src/Instance.cpp index a1e75c9af..5af8a1316 100644 --- a/Engine/Source/RHI-DirectX12/Src/Instance.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Instance.cpp @@ -127,8 +127,4 @@ namespace RHI::DirectX12 { return gpus[index].Get(); } - void DX12Instance::Destroy() - { - delete this; - } } diff --git a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h index dec5fc43a..f5cab0468 100644 --- a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h +++ b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Instance.h @@ -19,7 +19,6 @@ namespace RHI::Dummy { RHIType GetRHIType() override; uint32_t GetGpuNum() override; Gpu* GetGpu(uint32_t index) override; - void Destroy() override; private: Common::UniquePtr dummyGpu; diff --git a/Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp b/Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp index d4fea3921..dd54106f0 100644 --- a/Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp +++ b/Engine/Source/RHI-Dummy/Src/DummyRHIModule.cpp @@ -17,7 +17,9 @@ namespace RHI::Dummy { void DummyRHIModule::OnUnload() { - delete gInstance; + auto* instance = gInstance; + gInstance = nullptr; + delete instance; } Core::ModuleType DummyRHIModule::Type() const diff --git a/Engine/Source/RHI-Dummy/Src/Instance.cpp b/Engine/Source/RHI-Dummy/Src/Instance.cpp index f90587366..291eac6fa 100644 --- a/Engine/Source/RHI-Dummy/Src/Instance.cpp +++ b/Engine/Source/RHI-Dummy/Src/Instance.cpp @@ -33,8 +33,4 @@ namespace RHI::Dummy { return dummyGpu.Get(); } - void DummyInstance::Destroy() - { - delete this; - } } diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h index 3fccb4dac..68c6bdab5 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Instance.h @@ -23,7 +23,6 @@ namespace RHI::Vulkan { RHIType GetRHIType() override; uint32_t GetGpuNum() override; Gpu* GetGpu(uint32_t inIndex) override; - void Destroy() override; VkInstance GetNative() const; diff --git a/Engine/Source/RHI-Vulkan/Src/Instance.cpp b/Engine/Source/RHI-Vulkan/Src/Instance.cpp index 354a5c2b7..361b7dac6 100644 --- a/Engine/Source/RHI-Vulkan/Src/Instance.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Instance.cpp @@ -240,8 +240,4 @@ namespace RHI::Vulkan { } #endif - void VulkanInstance::Destroy() - { - delete this; - } } diff --git a/Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp b/Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp index f3b47fddc..02cf9da4a 100644 --- a/Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp +++ b/Engine/Source/RHI-Vulkan/Src/VulkanRHIModule.cpp @@ -17,7 +17,9 @@ namespace RHI::Vulkan { void VulkanRHIModule::OnUnload() { - delete gInstance; + auto* instance = gInstance; + gInstance = nullptr; + delete instance; } Core::ModuleType VulkanRHIModule::Type() const diff --git a/Engine/Source/RHI/Include/RHI/Instance.h b/Engine/Source/RHI/Include/RHI/Instance.h index 4cdec4a6b..68a90387a 100644 --- a/Engine/Source/RHI/Include/RHI/Instance.h +++ b/Engine/Source/RHI/Include/RHI/Instance.h @@ -40,7 +40,6 @@ namespace RHI { virtual RHIType GetRHIType() = 0; virtual uint32_t GetGpuNum() = 0; virtual Gpu* GetGpu(uint32_t index) = 0; - virtual void Destroy() = 0; protected: explicit Instance(const InstanceCreateInfo& inCreateInfo); From fc145fd26e488d53689c87c048ccc51a5935c72e Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 14:23:43 +0800 Subject: [PATCH 05/24] fix: make buffer texture copy pitches explicit --- Editor/Src/EditorWindow.cpp | 4 +- .../Include/RHI/DirectX12/Device.h | 2 +- .../RHI-DirectX12/Src/CommandRecorder.cpp | 20 +++---- Engine/Source/RHI-DirectX12/Src/Device.cpp | 15 +++-- .../RHI-Dummy/Include/RHI/Dummy/Device.h | 2 +- .../Source/RHI-Dummy/Src/CommandRecorder.cpp | 2 + Engine/Source/RHI-Dummy/Src/Device.cpp | 25 +++++++- .../RHI-Vulkan/Include/RHI/Vulkan/Device.h | 2 +- .../Source/RHI-Vulkan/Src/CommandRecorder.cpp | 16 ++--- Engine/Source/RHI-Vulkan/Src/Device.cpp | 12 ++-- .../Source/RHI/Include/RHI/CommandRecorder.h | 16 +++-- Engine/Source/RHI/Include/RHI/Device.h | 2 +- Engine/Source/RHI/Src/CommandRecorder.cpp | 59 ++++++++++++++++++- Engine/Source/Runtime/Src/Asset/Texture.cpp | 2 + Sample/Base/RenderTarget.cpp | 4 +- Sample/Rendering-BaseTexture/BaseTexture.cpp | 8 ++- Sample/Rendering-SSAO/SSAOApplication.cpp | 46 ++++++++++----- 17 files changed, 177 insertions(+), 60 deletions(-) diff --git a/Editor/Src/EditorWindow.cpp b/Editor/Src/EditorWindow.cpp index 1efc4cfc7..45e535f38 100644 --- a/Editor/Src/EditorWindow.cpp +++ b/Editor/Src/EditorWindow.cpp @@ -459,7 +459,9 @@ namespace Editor { 0, RHI::TextureSubResourceInfo(), Common::UVec3Consts::zero, - Common::UVec3(static_cast(width), static_cast(height), 1))); + Common::UVec3(static_cast(width), static_cast(height), 1), + copyFootprint.rowPitch, + copyFootprint.slicePitch)); copyRecorder->ResourceBarrier(RHI::Barrier::Transition(imguiFontTexture.Get(), RHI::TextureState::copyDst, RHI::TextureState::shaderReadOnly)); copyRecorder->EndPass(); } diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Device.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Device.h index a4cdecdfc..b7231deda 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Device.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Device.h @@ -94,7 +94,7 @@ namespace RHI::DirectX12 { Common::UniquePtr CreateQuerySet(const QuerySetCreateInfo& inCreateInfo) override; bool CheckSwapChainFormatSupport(Surface* inSurface, PixelFormat inFormat, ColorSpace inColorSpace) override; - TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) override; + TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) override; ID3D12Device* GetNative() const; ID3D12CommandSignature* GetDrawIndirectCommandSignature() const; diff --git a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp index 38ad5a9f4..b18581d5c 100644 --- a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp @@ -45,20 +45,18 @@ namespace RHI::DirectX12 { return { texture.GetNative(), static_cast(GetNativeSubResourceIndex(texture, subResource)) }; } - static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTextureLayout(DX12Device& device, const DX12Buffer& buffer, const DX12Texture& texture, const BufferTextureCopyInfo& copyInfo) + static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTextureLayout(const DX12Buffer& buffer, const DX12Texture& texture, const BufferTextureCopyInfo& copyInfo) { Assert(copyInfo.bufferOffset % D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT == 0); - const auto aspectLayout = device.GetTextureSubResourceCopyFootprint(texture, copyInfo.textureSubResource); // NOLINT + Assert(copyInfo.bufferRowPitch % D3D12_TEXTURE_DATA_PITCH_ALIGNMENT == 0); - // The buffer is laid out as the full sub-resource footprint (so the slice stride is RowPitch * full height); - // the copied window is selected by the box passed to CopyTextureRegion, not by shrinking this footprint. D3D12_PLACED_SUBRESOURCE_FOOTPRINT bufferLayout; bufferLayout.Offset = copyInfo.bufferOffset; bufferLayout.Footprint.Format = texture.GetNative()->GetDesc().Format; - bufferLayout.Footprint.Width = aspectLayout.extent.x; - bufferLayout.Footprint.Height = aspectLayout.extent.y; - bufferLayout.Footprint.Depth = aspectLayout.extent.z; - bufferLayout.Footprint.RowPitch = aspectLayout.rowPitch; + bufferLayout.Footprint.Width = copyInfo.copyRegion.x; + bufferLayout.Footprint.Height = static_cast(copyInfo.bufferSlicePitch / copyInfo.bufferRowPitch); + bufferLayout.Footprint.Depth = copyInfo.copyRegion.z; + bufferLayout.Footprint.RowPitch = static_cast(copyInfo.bufferRowPitch); return { buffer.GetNative(), bufferLayout }; } @@ -122,7 +120,8 @@ namespace RHI::DirectX12 { const auto* srcBuffer = static_cast(src); const auto* dstTexture = static_cast(dst); - const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(device, *srcBuffer, *dstTexture, copyInfo); + RHI::Internal::ValidateBufferTextureCopy(*src, *dst, copyInfo); + const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(*srcBuffer, *dstTexture, copyInfo); const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeTextureCopyLocation(*dstTexture, copyInfo.textureSubResource); const D3D12_BOX srcBox = GetNativeBox(Common::UVec3Consts::zero, copyInfo.copyRegion); @@ -141,7 +140,8 @@ namespace RHI::DirectX12 { const auto* dstBuffer = static_cast(dst); const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeTextureCopyLocation(*srcTexture, copyInfo.textureSubResource); - const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(device, *dstBuffer, *srcTexture, copyInfo); + RHI::Internal::ValidateBufferTextureCopy(*dst, *src, copyInfo); + const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(*dstBuffer, *srcTexture, copyInfo); const D3D12_BOX srcBox = GetNativeBox(copyInfo.textureOrigin, copyInfo.copyRegion); commandBuffer.GetNativeCmdList()->CopyTextureRegion( diff --git a/Engine/Source/RHI-DirectX12/Src/Device.cpp b/Engine/Source/RHI-DirectX12/Src/Device.cpp index 11036fb98..536fb5413 100644 --- a/Engine/Source/RHI-DirectX12/Src/Device.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Device.cpp @@ -280,7 +280,7 @@ namespace RHI::DirectX12 { return iter != supportedFormats.end() && iter->second.contains(inFormat); } - TextureSubResourceCopyFootprint DX12Device::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) + TextureSubResourceCopyFootprint DX12Device::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) { const auto& dx12Texture = static_cast(texture); const auto createInfo = texture.GetCreateInfo(); @@ -292,12 +292,17 @@ namespace RHI::DirectX12 { D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint; nativeDevice->GetCopyableFootprints(&nativeResourceDesc, nativeSubResourceIndex, 1, 0, &footprint, nullptr, nullptr, nullptr); + const Common::UVec3 subResourceExtent = { footprint.Footprint.Width, footprint.Footprint.Height, footprint.Footprint.Depth }; + const auto useFullSubResource = copyRegion == Common::UVec3Consts::zero; + const auto extent = useFullSubResource ? subResourceExtent : copyRegion; + Assert(extent.x <= subResourceExtent.x && extent.y <= subResourceExtent.y && extent.z <= subResourceExtent.z); + TextureSubResourceCopyFootprint result {}; - result.extent = { footprint.Footprint.Width, footprint.Footprint.Height, footprint.Footprint.Depth }; + result.extent = extent; result.bytesPerPixel = GetBytesPerPixel(createInfo.format); - result.rowPitch = footprint.Footprint.RowPitch; - result.slicePitch = footprint.Footprint.RowPitch * footprint.Footprint.Height; - result.totalBytes = footprint.Footprint.RowPitch * footprint.Footprint.Height * footprint.Footprint.Depth; + result.rowPitch = Common::AlignUp(result.bytesPerPixel * result.extent.x, static_cast(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT)); + result.slicePitch = result.rowPitch * result.extent.y; + result.totalBytes = result.slicePitch * result.extent.z; return result; } diff --git a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Device.h b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Device.h index 4d28be60e..459922201 100644 --- a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Device.h +++ b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/Device.h @@ -37,7 +37,7 @@ namespace RHI::Dummy { Common::UniquePtr CreateQuerySet(const QuerySetCreateInfo& createInfo) override; bool CheckSwapChainFormatSupport(Surface *surface, PixelFormat format, ColorSpace colorSpace) override; - TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) override; + TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) override; private: DummyGpu& gpu; diff --git a/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp b/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp index ada6bbdb2..5922cb660 100644 --- a/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp @@ -31,10 +31,12 @@ namespace RHI::Dummy { void DummyCopyPassCommandRecorder::CopyBufferToTexture(Buffer* src, Texture* dst, const BufferTextureCopyInfo& copyInfo) { + RHI::Internal::ValidateBufferTextureCopy(*src, *dst, copyInfo); } void DummyCopyPassCommandRecorder::CopyTextureToBuffer(Texture* src, Buffer* dst, const BufferTextureCopyInfo& copyInfo) { + RHI::Internal::ValidateBufferTextureCopy(*dst, *src, copyInfo); } void DummyCopyPassCommandRecorder::CopyTextureToTexture(Texture* src, Texture* dst, const TextureCopyInfo& copyInfo) diff --git a/Engine/Source/RHI-Dummy/Src/Device.cpp b/Engine/Source/RHI-Dummy/Src/Device.cpp index 9df125dd8..f27371664 100644 --- a/Engine/Source/RHI-Dummy/Src/Device.cpp +++ b/Engine/Source/RHI-Dummy/Src/Device.cpp @@ -2,6 +2,8 @@ // Created by johnk on 2023/3/21. // +#include + #include #include #include @@ -132,8 +134,25 @@ namespace RHI::Dummy { return true; } - TextureSubResourceCopyFootprint DummyDevice::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) - { - return {}; + TextureSubResourceCopyFootprint DummyDevice::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) + { + const auto& createInfo = texture.GetCreateInfo(); + const auto mipLevel = subResourceInfo.mipLevel; + const auto baseDepth = createInfo.type == TextureType::t3D ? createInfo.depthOrArraySize : 1; + const Common::UVec3 subResourceExtent = { + std::max(createInfo.width >> mipLevel, 1u), + std::max(createInfo.height >> mipLevel, 1u), + std::max(baseDepth >> mipLevel, 1u) + }; + const auto extent = copyRegion == Common::UVec3Consts::zero ? subResourceExtent : copyRegion; + Assert(extent.x <= subResourceExtent.x && extent.y <= subResourceExtent.y && extent.z <= subResourceExtent.z); + + TextureSubResourceCopyFootprint result {}; + result.extent = extent; + result.bytesPerPixel = GetBytesPerPixel(createInfo.format); + result.rowPitch = result.bytesPerPixel * result.extent.x; + result.slicePitch = result.rowPitch * result.extent.y; + result.totalBytes = result.slicePitch * result.extent.z; + return result; } } diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Device.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Device.h index 951705ff2..2c8ff528b 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Device.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Device.h @@ -44,7 +44,7 @@ namespace RHI::Vulkan { Common::UniquePtr CreateQuerySet(const QuerySetCreateInfo& inCreateInfo) override; bool CheckSwapChainFormatSupport(Surface* inSurface, PixelFormat inFormat, ColorSpace inColorSpace) override; - TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) override; + TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) override; VkDevice GetNative() const; VmaAllocator& GetNativeAllocator(); diff --git a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp index 3e57c04cf..ff577f600 100644 --- a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp @@ -152,16 +152,14 @@ namespace RHI::Vulkan { return result; } - static VkBufferImageCopy GetNativeBufferImageCopy(Device& device, const Texture& texture, const BufferTextureCopyInfo& copyInfo) + static VkBufferImageCopy GetNativeBufferImageCopy(const Texture& texture, const BufferTextureCopyInfo& copyInfo) { - const auto footprint = device.GetTextureSubResourceCopyFootprint(texture, copyInfo.textureSubResource); // NOLINT + const auto bytesPerPixel = GetBytesPerPixel(texture.GetCreateInfo().format); VkBufferImageCopy result {}; result.bufferOffset = copyInfo.bufferOffset; - // bufferRowLength/bufferImageHeight are measured in texels and describe how the linear buffer data is strided; - // they mirror the full sub-resource footprint, while imageExtent selects the copied window within it. - result.bufferRowLength = static_cast(footprint.rowPitch / footprint.bytesPerPixel); - result.bufferImageHeight = footprint.extent.y; + result.bufferRowLength = static_cast(copyInfo.bufferRowPitch / bytesPerPixel); + result.bufferImageHeight = static_cast(copyInfo.bufferSlicePitch / copyInfo.bufferRowPitch); result.imageOffset = { static_cast(copyInfo.textureOrigin.x), static_cast(copyInfo.textureOrigin.y), static_cast(copyInfo.textureOrigin.z) }; result.imageExtent = { copyInfo.copyRegion.x, copyInfo.copyRegion.y, copyInfo.copyRegion.z }; result.imageSubresource = GetNativeImageSubResourceLayers(copyInfo.textureSubResource); @@ -332,7 +330,8 @@ namespace RHI::Vulkan { const auto* srcBuffer = static_cast(src); const auto* dstTexture = static_cast(dst); - const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(device, *dst, copyInfo); + RHI::Internal::ValidateBufferTextureCopy(*src, *dst, copyInfo); + const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*dst, copyInfo); vkCmdCopyBufferToImage(commandBuffer.GetNative(), srcBuffer->GetNative(), dstTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &nativeBufferImageCopy); } @@ -341,7 +340,8 @@ namespace RHI::Vulkan { const auto* srcTexture = static_cast(src); const auto* dstBuffer = static_cast(dst); - const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(device, *src, copyInfo); + RHI::Internal::ValidateBufferTextureCopy(*dst, *src, copyInfo); + const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*src, copyInfo); vkCmdCopyImageToBuffer(commandBuffer.GetNative(), srcTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstBuffer->GetNative(), 1, &nativeBufferImageCopy); } diff --git a/Engine/Source/RHI-Vulkan/Src/Device.cpp b/Engine/Source/RHI-Vulkan/Src/Device.cpp index 0d73c3989..ad03ca73a 100644 --- a/Engine/Source/RHI-Vulkan/Src/Device.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Device.cpp @@ -232,18 +232,22 @@ namespace RHI::Vulkan { return iter != surfaceFormats.end(); } - TextureSubResourceCopyFootprint VulkanDevice::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) + TextureSubResourceCopyFootprint VulkanDevice::GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion) { const auto& createInfo = texture.GetCreateInfo(); const auto mipLevel = subResourceInfo.mipLevel; const auto baseDepth = createInfo.type == TextureType::t3D ? createInfo.depthOrArraySize : 1; - - TextureSubResourceCopyFootprint result {}; - result.extent = { + const Common::UVec3 subResourceExtent = { std::max(createInfo.width >> mipLevel, 1u), std::max(createInfo.height >> mipLevel, 1u), std::max(baseDepth >> mipLevel, 1u) }; + const auto useFullSubResource = copyRegion == Common::UVec3Consts::zero; + const auto extent = useFullSubResource ? subResourceExtent : copyRegion; + Assert(extent.x <= subResourceExtent.x && extent.y <= subResourceExtent.y && extent.z <= subResourceExtent.z); + + TextureSubResourceCopyFootprint result {}; + result.extent = extent; result.bytesPerPixel = GetBytesPerPixel(createInfo.format); result.rowPitch = result.bytesPerPixel * result.extent.x; result.slicePitch = result.rowPitch * result.extent.y; diff --git a/Engine/Source/RHI/Include/RHI/CommandRecorder.h b/Engine/Source/RHI/Include/RHI/CommandRecorder.h index 160925e43..a68b2e3c6 100644 --- a/Engine/Source/RHI/Include/RHI/CommandRecorder.h +++ b/Engine/Source/RHI/Include/RHI/CommandRecorder.h @@ -78,22 +78,26 @@ namespace RHI { struct BufferTextureCopyInfo { size_t bufferOffset; + size_t bufferRowPitch; + size_t bufferSlicePitch; TextureSubResourceInfo textureSubResource; Common::UVec3 textureOrigin; Common::UVec3 copyRegion; - explicit BufferTextureCopyInfo( - size_t inBufferOffset = 0, - const TextureSubResourceInfo& inTextureSubResource = TextureSubResourceInfo(), - const Common::UVec3& inTextureOrigin = Common::UVec3Consts::zero, - const Common::UVec3& inCopyRegion = Common::UVec3Consts::zero); + explicit BufferTextureCopyInfo(size_t inBufferOffset = 0, const TextureSubResourceInfo& inTextureSubResource = TextureSubResourceInfo(), const Common::UVec3& inTextureOrigin = Common::UVec3Consts::zero, const Common::UVec3& inCopyRegion = Common::UVec3Consts::zero, size_t inBufferRowPitch = 0, size_t inBufferSlicePitch = 0); BufferTextureCopyInfo& SetBufferOffset(size_t inBufferOffset); + BufferTextureCopyInfo& SetBufferRowPitch(size_t inBufferRowPitch); + BufferTextureCopyInfo& SetBufferSlicePitch(size_t inBufferSlicePitch); BufferTextureCopyInfo& SetTextureSubResource(const TextureSubResourceInfo& inTextureSubResource); BufferTextureCopyInfo& SetTextureOrigin(const Common::UVec3& inTextureOrigin); BufferTextureCopyInfo& SetCopyRegion(const Common::UVec3& inCopyRegion); }; + namespace Internal { + void ValidateBufferTextureCopy(const Buffer& buffer, const Texture& texture, const BufferTextureCopyInfo& copyInfo); + } + struct DrawIndirectArguments { uint32_t vertexCount = 0; uint32_t instanceCount = 0; @@ -217,7 +221,7 @@ namespace RHI { ~CopyPassCommandRecorder() override; virtual void CopyBufferToBuffer(Buffer* src, Buffer* dst, const BufferCopyInfo& copyInfo) = 0; - // NOTICE: CopyBufferToTexture/CopyTextureToBuffer treat buffer contains copy region (sub-image) data from offset + // The buffer layout starts at bufferOffset and is described explicitly by bufferRowPitch and bufferSlicePitch. virtual void CopyBufferToTexture(Buffer* src, Texture* dst, const BufferTextureCopyInfo& copyInfo) = 0; virtual void CopyTextureToBuffer(Texture* src, Buffer* dst, const BufferTextureCopyInfo& copyInfo) = 0; virtual void CopyTextureToTexture(Texture* src, Texture* dst, const TextureCopyInfo& copyInfo) = 0; diff --git a/Engine/Source/RHI/Include/RHI/Device.h b/Engine/Source/RHI/Include/RHI/Device.h index a04a28c4f..5a31427e5 100644 --- a/Engine/Source/RHI/Include/RHI/Device.h +++ b/Engine/Source/RHI/Include/RHI/Device.h @@ -88,7 +88,7 @@ namespace RHI { virtual Common::UniquePtr CreateQuerySet(const QuerySetCreateInfo& createInfo) = 0; virtual bool CheckSwapChainFormatSupport(Surface* surface, PixelFormat format, ColorSpace colorSpace) = 0; - virtual TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo) = 0; + virtual TextureSubResourceCopyFootprint GetTextureSubResourceCopyFootprint(const Texture& texture, const TextureSubResourceInfo& subResourceInfo, const Common::UVec3& copyRegion = Common::UVec3Consts::zero) = 0; protected: explicit Device(const DeviceCreateInfo& createInfo); diff --git a/Engine/Source/RHI/Src/CommandRecorder.cpp b/Engine/Source/RHI/Src/CommandRecorder.cpp index c3f67420d..ce2c8d9fc 100644 --- a/Engine/Source/RHI/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI/Src/CommandRecorder.cpp @@ -2,7 +2,50 @@ // Created by johnk on 21/2/2022. // +#include +#include + #include +#include +#include + +namespace RHI::Internal { + void ValidateBufferTextureCopy(const Buffer& buffer, const Texture& texture, const BufferTextureCopyInfo& copyInfo) + { + const auto& textureCreateInfo = texture.GetCreateInfo(); + Assert(copyInfo.textureSubResource.mipLevel < textureCreateInfo.mipLevels); + + const auto arraySize = textureCreateInfo.type == TextureType::t3D ? 1u : textureCreateInfo.depthOrArraySize; + Assert(copyInfo.textureSubResource.arrayLayer < arraySize); + + const auto mipLevel = copyInfo.textureSubResource.mipLevel; + const auto baseDepth = textureCreateInfo.type == TextureType::t3D ? textureCreateInfo.depthOrArraySize : 1u; + const Common::UVec3 subResourceExtent = { + std::max(textureCreateInfo.width >> mipLevel, 1u), + std::max(textureCreateInfo.height >> mipLevel, 1u), + std::max(baseDepth >> mipLevel, 1u) + }; + + Assert(copyInfo.copyRegion.x > 0 && copyInfo.copyRegion.y > 0 && copyInfo.copyRegion.z > 0); + Assert(copyInfo.textureOrigin.x <= subResourceExtent.x && copyInfo.copyRegion.x <= subResourceExtent.x - copyInfo.textureOrigin.x); + Assert(copyInfo.textureOrigin.y <= subResourceExtent.y && copyInfo.copyRegion.y <= subResourceExtent.y - copyInfo.textureOrigin.y); + Assert(copyInfo.textureOrigin.z <= subResourceExtent.z && copyInfo.copyRegion.z <= subResourceExtent.z - copyInfo.textureOrigin.z); + + const auto bytesPerPixel = GetBytesPerPixel(textureCreateInfo.format); + Assert(copyInfo.copyRegion.x <= std::numeric_limits::max() / bytesPerPixel); + const auto packedRowPitch = bytesPerPixel * copyInfo.copyRegion.x; + Assert(copyInfo.bufferRowPitch >= packedRowPitch && copyInfo.bufferRowPitch % bytesPerPixel == 0); + Assert(copyInfo.copyRegion.y <= std::numeric_limits::max() / copyInfo.bufferRowPitch); + Assert(copyInfo.bufferSlicePitch >= copyInfo.bufferRowPitch * copyInfo.copyRegion.y); + Assert(copyInfo.bufferSlicePitch % copyInfo.bufferRowPitch == 0); + Assert(copyInfo.bufferRowPitch <= std::numeric_limits::max()); + Assert(copyInfo.bufferSlicePitch / copyInfo.bufferRowPitch <= std::numeric_limits::max()); + + const auto bufferSize = static_cast(buffer.GetCreateInfo().size); + Assert(copyInfo.bufferOffset <= bufferSize); + Assert(copyInfo.bufferSlicePitch <= (bufferSize - copyInfo.bufferOffset) / copyInfo.copyRegion.z); + } +} namespace RHI { TextureSubResourceInfo::TextureSubResourceInfo( @@ -97,8 +140,10 @@ namespace RHI { return *this; } - BufferTextureCopyInfo::BufferTextureCopyInfo(const size_t inBufferOffset, const TextureSubResourceInfo& inTextureSubResource, const Common::UVec3& inTextureOrigin, const Common::UVec3& inCopyRegion) + BufferTextureCopyInfo::BufferTextureCopyInfo(const size_t inBufferOffset, const TextureSubResourceInfo& inTextureSubResource, const Common::UVec3& inTextureOrigin, const Common::UVec3& inCopyRegion, const size_t inBufferRowPitch, const size_t inBufferSlicePitch) : bufferOffset(inBufferOffset) + , bufferRowPitch(inBufferRowPitch) + , bufferSlicePitch(inBufferSlicePitch) , textureSubResource(inTextureSubResource) , textureOrigin(inTextureOrigin) , copyRegion(inCopyRegion) @@ -111,6 +156,18 @@ namespace RHI { return *this; } + BufferTextureCopyInfo& BufferTextureCopyInfo::SetBufferRowPitch(const size_t inBufferRowPitch) + { + bufferRowPitch = inBufferRowPitch; + return *this; + } + + BufferTextureCopyInfo& BufferTextureCopyInfo::SetBufferSlicePitch(const size_t inBufferSlicePitch) + { + bufferSlicePitch = inBufferSlicePitch; + return *this; + } + BufferTextureCopyInfo& BufferTextureCopyInfo::SetTextureSubResource(const TextureSubResourceInfo& inTextureSubResource) { textureSubResource = inTextureSubResource; diff --git a/Engine/Source/Runtime/Src/Asset/Texture.cpp b/Engine/Source/Runtime/Src/Asset/Texture.cpp index 0083607e6..2ddb54f9c 100644 --- a/Engine/Source/Runtime/Src/Asset/Texture.cpp +++ b/Engine/Source/Runtime/Src/Asset/Texture.cpp @@ -308,6 +308,8 @@ namespace Runtime { texturePtr, RHI::BufferTextureCopyInfo() .SetBufferOffset(copyOffsets[subResourceIndex]) + .SetBufferRowPitch(copyFootprints[subResourceIndex].rowPitch) + .SetBufferSlicePitch(copyFootprints[subResourceIndex].slicePitch) .SetTextureSubResource(RHI::TextureSubResourceInfo(m, a, aspect)) .SetTextureOrigin({ 0, 0, 0 }) .SetCopyRegion(copyFootprints[subResourceIndex].extent)); diff --git a/Sample/Base/RenderTarget.cpp b/Sample/Base/RenderTarget.cpp index 3addd7f12..8ba757b54 100644 --- a/Sample/Base/RenderTarget.cpp +++ b/Sample/Base/RenderTarget.cpp @@ -184,8 +184,8 @@ void HeadlessRenderTarget::PrepareForSubmit(RGBuilder& builder, const RGTextureR builder.AddCopyPass( "ReadbackOutput", copyDesc, - [outputTexture, readback, copyRegion = UVec3(width, height, 1)](const RGBuilder& rg, CopyPassCommandRecorder& recorder) -> void { - recorder.CopyTextureToBuffer(rg.GetRHI(outputTexture), rg.GetRHI(readback), BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, copyRegion)); + [outputTexture, readback, copyRegion = UVec3(width, height, 1), rowPitch = copyFootprint.rowPitch, slicePitch = copyFootprint.slicePitch](const RGBuilder& rg, CopyPassCommandRecorder& recorder) -> void { + recorder.CopyTextureToBuffer(rg.GetRHI(outputTexture), rg.GetRHI(readback), BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, copyRegion, rowPitch, slicePitch)); }); } diff --git a/Sample/Rendering-BaseTexture/BaseTexture.cpp b/Sample/Rendering-BaseTexture/BaseTexture.cpp index c96764b73..154a432f8 100644 --- a/Sample/Rendering-BaseTexture/BaseTexture.cpp +++ b/Sample/Rendering-BaseTexture/BaseTexture.cpp @@ -315,7 +315,13 @@ void BaseTexApp::CreateTextureAndSampler() copyRecorder->CopyBufferToTexture( imageBuffer.Get(), texture.Get(), - BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, UVec3(static_cast(width), static_cast(height), 1))); + BufferTextureCopyInfo( + 0, + TextureSubResourceInfo(), + UVec3Consts::zero, + UVec3(static_cast(width), static_cast(height), 1), + copyFootprint.rowPitch, + copyFootprint.slicePitch)); copyRecorder->ResourceBarrier(Barrier::Transition(texture.Get(), TextureState::copyDst, TextureState::shaderReadOnly)); } copyRecorder->EndPass(); diff --git a/Sample/Rendering-SSAO/SSAOApplication.cpp b/Sample/Rendering-SSAO/SSAOApplication.cpp index d3967d002..d229f2935 100644 --- a/Sample/Rendering-SSAO/SSAOApplication.cpp +++ b/Sample/Rendering-SSAO/SSAOApplication.cpp @@ -780,19 +780,6 @@ class SSAOApp final : public Application { randomVec = FVec4(rndDist(rndEngine) * 2.0f - 1.0f, rndDist(rndEngine) * 2.0f - 1.0f, 0.0f, 0.0f); } - const BufferCreateInfo bufferInfo = BufferCreateInfo() - .SetSize(ssaoNoise.size() * sizeof(FVec4)) - .SetUsages(BufferUsageBits::mapWrite | BufferUsageBits::copySrc) - .SetInitialState(BufferState::staging) - .SetDebugName("noiseStaging"); - - const UniquePtr stagingBuffer = device->CreateBuffer(bufferInfo); - if (stagingBuffer != nullptr) { - auto* data = stagingBuffer->Map(MapMode::write, 0, bufferInfo.size); - memcpy(data, ssaoNoise.data(), bufferInfo.size); - stagingBuffer->Unmap(); - } - noiseTex = device->CreateTexture( TextureCreateInfo() .SetFormat(PixelFormat::rgba32Float) @@ -805,6 +792,23 @@ class SSAOApp final : public Application { .SetUsages(TextureUsageBits::copyDst | TextureUsageBits::textureBinding) .SetInitialState(TextureState::undefined)); + const auto copyFootprint = device->GetTextureSubResourceCopyFootprint(*noiseTex, TextureSubResourceInfo()); + const BufferCreateInfo bufferInfo = BufferCreateInfo() + .SetSize(copyFootprint.totalBytes) + .SetUsages(BufferUsageBits::mapWrite | BufferUsageBits::copySrc) + .SetInitialState(BufferState::staging) + .SetDebugName("noiseStaging"); + + const UniquePtr stagingBuffer = device->CreateBuffer(bufferInfo); + if (stagingBuffer != nullptr) { + auto* data = static_cast(stagingBuffer->Map(MapMode::write, 0, bufferInfo.size)); + const auto srcRowPitch = ssaoNoiseDim * sizeof(FVec4); + for (auto y = 0u; y < ssaoNoiseDim; y++) { + memcpy(data + y * copyFootprint.rowPitch, ssaoNoise.data() + y * ssaoNoiseDim, srcRowPitch); + } + stagingBuffer->Unmap(); + } + // Copy data auto copyCmdBuffer = device->CreateCommandBuffer(QueueType::graphics); const UniquePtr commandRecorder = copyCmdBuffer->Begin(); @@ -815,7 +819,13 @@ class SSAOApp final : public Application { copyRecorder->CopyBufferToTexture( stagingBuffer.Get(), noiseTex.Get(), - BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, UVec3(ssaoNoiseDim, ssaoNoiseDim, 1))); + BufferTextureCopyInfo( + 0, + TextureSubResourceInfo(), + UVec3Consts::zero, + UVec3(ssaoNoiseDim, ssaoNoiseDim, 1), + copyFootprint.rowPitch, + copyFootprint.slicePitch)); copyRecorder->ResourceBarrier(Barrier::Transition(noiseTex.Get(), TextureState::copyDst, TextureState::shaderReadOnly)); } copyRecorder->EndPass(); @@ -878,7 +888,13 @@ class SSAOApp final : public Application { copyRecorder->CopyBufferToTexture( stagingBuffer.Get(), diffuseTex.Get(), - BufferTextureCopyInfo(0, TextureSubResourceInfo(), UVec3Consts::zero, UVec3(texData->width, texData->height, 1))); + BufferTextureCopyInfo( + 0, + TextureSubResourceInfo(), + UVec3Consts::zero, + UVec3(texData->width, texData->height, 1), + copyFootprint.rowPitch, + copyFootprint.slicePitch)); copyRecorder->ResourceBarrier(Barrier::Transition(diffuseTex.Get(), TextureState::copyDst, TextureState::shaderReadOnly)); } copyRecorder->EndPass(); From 4917cd0f7ddfe2203f64a9ce71dea00872328701 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 14:42:08 +0800 Subject: [PATCH 06/24] fix: support advanced raster shader stages --- .../Include/RHI/DirectX12/Common.h | 1 + .../RHI-DirectX12/Src/CommandRecorder.cpp | 8 ++++++ Engine/Source/RHI-DirectX12/Src/Pipeline.cpp | 6 +++++ .../RHI-Vulkan/Include/RHI/Vulkan/Common.h | 2 ++ Engine/Source/RHI-Vulkan/Src/Device.cpp | 2 ++ Engine/Source/RHI-Vulkan/Src/Pipeline.cpp | 11 +++++++- Engine/Source/RHI/Include/RHI/Common.h | 2 ++ Engine/Source/RHI/Include/RHI/Pipeline.h | 12 +++++++-- Engine/Source/RHI/Src/Pipeline.cpp | 27 +++++++++++++++++-- Engine/Source/Render/Src/RenderCache.cpp | 13 +++++++++ 10 files changed, 79 insertions(+), 5 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h index dfda56ae0..30ca578c8 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h @@ -176,6 +176,7 @@ namespace RHI::DirectX12 { ECIMPL_ITEM(PrimitiveTopologyType::point, D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT) ECIMPL_ITEM(PrimitiveTopologyType::line, D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE) ECIMPL_ITEM(PrimitiveTopologyType::triangle, D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE) + ECIMPL_ITEM(PrimitiveTopologyType::patch, D3D12_PRIMITIVE_TOPOLOGY_TYPE_PATCH) ECIMPL_END(D3D12_PRIMITIVE_TOPOLOGY_TYPE) ECIMPL_BEGIN(FillMode, D3D12_FILL_MODE) diff --git a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp index b18581d5c..6275c78ae 100644 --- a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp @@ -394,6 +394,14 @@ namespace RHI::DirectX12 { void DX12RasterPassCommandRecorder::SetPrimitiveTopology(PrimitiveTopology inPrimitiveTopology) { + if (inPrimitiveTopology == PrimitiveTopology::patchList) { + AssertWithReason(rasterPipeline != nullptr, "a raster pipeline must be bound before setting patch-list topology"); + const uint32_t patchControlPoints = rasterPipeline->GetPrimitiveState().patchControlPoints; + AssertWithReason(patchControlPoints >= 1 && patchControlPoints <= 32, "patch-list topology requires a tessellation pipeline"); + const auto nativeTopology = static_cast(D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST + patchControlPoints - 1); + commandBuffer.GetNativeCmdList()->IASetPrimitiveTopology(nativeTopology); + return; + } commandBuffer.GetNativeCmdList()->IASetPrimitiveTopology(EnumCast(inPrimitiveTopology)); } diff --git a/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp b/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp index d5cd0d594..4708d6f40 100644 --- a/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp @@ -211,11 +211,17 @@ namespace RHI::DirectX12 { { auto* vertexShader = static_cast(inCreateInfo.vertexShader); auto* fragmentShader = static_cast(inCreateInfo.pixelShader); + auto* geometryShader = static_cast(inCreateInfo.geometryShader); + auto* hullShader = static_cast(inCreateInfo.hullShader); + auto* domainShader = static_cast(inCreateInfo.domainShader); D3D12_GRAPHICS_PIPELINE_STATE_DESC desc {}; desc.pRootSignature = pipelineLayout->GetNative(); desc.VS = vertexShader->GetNative(); desc.PS = fragmentShader->GetNative(); + desc.GS = geometryShader != nullptr ? geometryShader->GetNative() : D3D12_SHADER_BYTECODE {}; + desc.HS = hullShader != nullptr ? hullShader->GetNative() : D3D12_SHADER_BYTECODE {}; + desc.DS = domainShader != nullptr ? domainShader->GetNative() : D3D12_SHADER_BYTECODE {}; desc.RasterizerState = GetDX12RasterizerDesc(inCreateInfo); desc.BlendState = GetDX12BlendDesc(inCreateInfo); desc.DepthStencilState = GetDX12DepthStencilDesc(inCreateInfo); diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h index d11a605c0..210cbbcad 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h @@ -110,6 +110,7 @@ namespace RHI::Vulkan { ECIMPL_ITEM(PrimitiveTopologyType::point, VK_PRIMITIVE_TOPOLOGY_POINT_LIST) ECIMPL_ITEM(PrimitiveTopologyType::line, VK_PRIMITIVE_TOPOLOGY_LINE_LIST) ECIMPL_ITEM(PrimitiveTopologyType::triangle, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST) + ECIMPL_ITEM(PrimitiveTopologyType::patch, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) ECIMPL_END(VkPrimitiveTopology) ECIMPL_BEGIN(FillMode, VkPolygonMode) @@ -127,6 +128,7 @@ namespace RHI::Vulkan { ECIMPL_ITEM(PrimitiveTopology::lineStripAdj, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY) ECIMPL_ITEM(PrimitiveTopology::triangleListAdj, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY) ECIMPL_ITEM(PrimitiveTopology::triangleStripAdj, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY) + ECIMPL_ITEM(PrimitiveTopology::patchList, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST) ECIMPL_END(VkPrimitiveTopology) ECIMPL_BEGIN(CullMode, VkCullModeFlagBits) diff --git a/Engine/Source/RHI-Vulkan/Src/Device.cpp b/Engine/Source/RHI-Vulkan/Src/Device.cpp index ad03ca73a..925287f7c 100644 --- a/Engine/Source/RHI-Vulkan/Src/Device.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Device.cpp @@ -363,6 +363,8 @@ namespace RHI::Vulkan { enabledFeatures.textureCompressionBC = supportedFeatures.features.textureCompressionBC; enabledFeatures.occlusionQueryPrecise = supportedFeatures.features.occlusionQueryPrecise; enabledFeatures.imageCubeArray = supportedFeatures.features.imageCubeArray; + enabledFeatures.geometryShader = supportedFeatures.features.geometryShader; + enabledFeatures.tessellationShader = supportedFeatures.features.tessellationShader; VkDeviceCreateInfo deviceCreateInfo = {}; deviceCreateInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; diff --git a/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp b/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp index 14f9620fa..75cce0ee1 100644 --- a/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp @@ -203,8 +203,14 @@ namespace RHI::Vulkan { stages.emplace_back(stageInfo); }; setStage(inCreateInfo.vertexShader, VK_SHADER_STAGE_VERTEX_BIT); + setStage(inCreateInfo.hullShader, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT); + setStage(inCreateInfo.domainShader, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT); + setStage(inCreateInfo.geometryShader, VK_SHADER_STAGE_GEOMETRY_BIT); setStage(inCreateInfo.pixelShader, VK_SHADER_STAGE_FRAGMENT_BIT); + AssertWithReason(inCreateInfo.geometryShader == nullptr || device.GetEnabledFeatures().geometryShader == VK_TRUE, "Vulkan geometry shader feature is not supported"); + AssertWithReason(inCreateInfo.hullShader == nullptr || device.GetEnabledFeatures().tessellationShader == VK_TRUE, "Vulkan tessellation shader feature is not supported"); + const std::array dynamicStates = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR, @@ -220,6 +226,9 @@ namespace RHI::Vulkan { VkPipelineMultisampleStateCreateInfo multiSampleInfo = ConstructMultiSampleState(inCreateInfo); VkPipelineDepthStencilStateCreateInfo dsInfo = ConstructDepthStencil(inCreateInfo); VkPipelineInputAssemblyStateCreateInfo assemblyInfo = ConstructInputAssembly(inCreateInfo); + VkPipelineTessellationStateCreateInfo tessellationInfo = {}; + tessellationInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO; + tessellationInfo.patchControlPoints = inCreateInfo.primitiveState.patchControlPoints; VkPipelineRasterizationStateCreateInfo rasterState = ConstructRasterization(device, inCreateInfo); VkPipelineViewportStateCreateInfo viewportState = ConstructViewportInfo(inCreateInfo); @@ -257,7 +266,7 @@ namespace RHI::Vulkan { pipelineCreateInfo.pInputAssemblyState = &assemblyInfo; pipelineCreateInfo.pRasterizationState = &rasterState; pipelineCreateInfo.pViewportState = &viewportState; - pipelineCreateInfo.pTessellationState = nullptr; + pipelineCreateInfo.pTessellationState = inCreateInfo.hullShader != nullptr ? &tessellationInfo : nullptr; pipelineCreateInfo.pColorBlendState = &colorInfo; pipelineCreateInfo.pVertexInputState = &vtxInput; pipelineCreateInfo.pNext = &pipelineRenderingCreateInfo; diff --git a/Engine/Source/RHI/Include/RHI/Common.h b/Engine/Source/RHI/Include/RHI/Common.h index c7082188f..aa2f8875b 100644 --- a/Engine/Source/RHI/Include/RHI/Common.h +++ b/Engine/Source/RHI/Include/RHI/Common.h @@ -283,6 +283,7 @@ namespace RHI { point, line, triangle, + patch, max }; @@ -296,6 +297,7 @@ namespace RHI { lineStripAdj, triangleListAdj, triangleStripAdj, + patchList, max }; diff --git a/Engine/Source/RHI/Include/RHI/Pipeline.h b/Engine/Source/RHI/Include/RHI/Pipeline.h index d3a6ccbf6..658041b35 100644 --- a/Engine/Source/RHI/Include/RHI/Pipeline.h +++ b/Engine/Source/RHI/Include/RHI/Pipeline.h @@ -93,7 +93,8 @@ namespace RHI { IndexFormat stripIndexFormat; FrontFace frontFace; CullMode cullMode; - bool depthClip = true; + bool depthClip; + uint32_t patchControlPoints; explicit PrimitiveState( PrimitiveTopologyType inTopologyType = PrimitiveTopologyType::triangle, @@ -101,7 +102,8 @@ namespace RHI { IndexFormat inStripIndexFormat = IndexFormat::uint16, FrontFace inFrontFace = FrontFace::ccw, CullMode inCullMode = CullMode::back, - bool inDepthClip = true); + bool inDepthClip = true, + uint32_t inPatchControlPoints = 0); PrimitiveState& SetTopologyType(PrimitiveTopologyType inTopologyType); PrimitiveState& SetFillMode(FillMode inFillMode); @@ -109,6 +111,7 @@ namespace RHI { PrimitiveState& SetFrontFace(FrontFace inFrontFace); PrimitiveState& SetCullMode(CullMode inCullMode); PrimitiveState& SetDepthClip(bool inDepthClip); + PrimitiveState& SetPatchControlPoints(uint32_t inPatchControlPoints); }; struct StencilFaceState { @@ -288,8 +291,13 @@ namespace RHI { NonCopyable(RasterPipeline) ~RasterPipeline() override; + const PrimitiveState& GetPrimitiveState() const; + protected: explicit RasterPipeline(const RasterPipelineCreateInfo& createInfo); + + private: + PrimitiveState primitiveState; }; } diff --git a/Engine/Source/RHI/Src/Pipeline.cpp b/Engine/Source/RHI/Src/Pipeline.cpp index 71890f7f2..46d6c1951 100644 --- a/Engine/Source/RHI/Src/Pipeline.cpp +++ b/Engine/Source/RHI/Src/Pipeline.cpp @@ -65,13 +65,15 @@ namespace RHI { const IndexFormat inStripIndexFormat, const FrontFace inFrontFace, const CullMode inCullMode, - const bool inDepthClip) + const bool inDepthClip, + const uint32_t inPatchControlPoints) : topologyType(inTopologyType) , fillMode(inFillMode) , stripIndexFormat(inStripIndexFormat) , frontFace(inFrontFace) , cullMode(inCullMode) , depthClip(inDepthClip) + , patchControlPoints(inPatchControlPoints) { } @@ -111,6 +113,12 @@ namespace RHI { return *this; } + PrimitiveState& PrimitiveState::SetPatchControlPoints(const uint32_t inPatchControlPoints) + { + patchControlPoints = inPatchControlPoints; + return *this; + } + StencilFaceState::StencilFaceState( const CompareFunc inCompareFunc, const StencilOp inFailOp, @@ -433,7 +441,22 @@ namespace RHI { ComputePipeline::~ComputePipeline() = default; - RasterPipeline::RasterPipeline(const RasterPipelineCreateInfo&) {} + RasterPipeline::RasterPipeline(const RasterPipelineCreateInfo& createInfo) + : primitiveState(createInfo.primitiveState) + { + const bool hasHullShader = createInfo.hullShader != nullptr; + const bool hasDomainShader = createInfo.domainShader != nullptr; + const bool hasTessellationShaders = hasHullShader && hasDomainShader; + AssertWithReason(hasHullShader == hasDomainShader, "hull and domain shaders must be provided together"); + AssertWithReason(hasTessellationShaders == (primitiveState.topologyType == PrimitiveTopologyType::patch), "patch topology requires hull and domain shaders"); + AssertWithReason(!hasTessellationShaders || (primitiveState.patchControlPoints >= 1 && primitiveState.patchControlPoints <= 32), "tessellation patch control point count must be between 1 and 32"); + AssertWithReason(hasTessellationShaders || primitiveState.patchControlPoints == 0, "patch control points require hull and domain shaders"); + } + + const PrimitiveState& RasterPipeline::GetPrimitiveState() const + { + return primitiveState; + } RasterPipeline::~RasterPipeline() = default; } diff --git a/Engine/Source/Render/Src/RenderCache.cpp b/Engine/Source/Render/Src/RenderCache.cpp index ef573a078..bf6b4ec74 100644 --- a/Engine/Source/Render/Src/RenderCache.cpp +++ b/Engine/Source/Render/Src/RenderCache.cpp @@ -43,6 +43,19 @@ namespace Render::Internal { }); } + static uint64_t HashRhiState(const RHI::PrimitiveState& state) + { + return CombineHashes({ + static_cast(state.topologyType), + static_cast(state.fillMode), + static_cast(state.stripIndexFormat), + static_cast(state.frontFace), + static_cast(state.cullMode), + static_cast(state.depthClip), + static_cast(state.patchControlPoints) + }); + } + static uint64_t HashRhiState(const RHI::DepthStencilState& state) { return CombineHashes({ From 0a24ba4bb557aa58c4d5c46fd42e43f81f356a4d Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 14:46:20 +0800 Subject: [PATCH 07/24] fix: initialize buffer creation defaults --- Engine/Source/RHI/Src/Buffer.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Engine/Source/RHI/Src/Buffer.cpp b/Engine/Source/RHI/Src/Buffer.cpp index cca632c2e..526f5b944 100644 --- a/Engine/Source/RHI/Src/Buffer.cpp +++ b/Engine/Source/RHI/Src/Buffer.cpp @@ -64,7 +64,12 @@ namespace RHI::Internal { } namespace RHI { - BufferCreateInfo::BufferCreateInfo() = default; + BufferCreateInfo::BufferCreateInfo() + : size(0) + , usages(BufferUsageFlags::null) + , initialState(BufferState::max) + { + } BufferCreateInfo::BufferCreateInfo(const uint32_t inSize, const BufferUsageFlags inUsages, const BufferState inInitialState, std::string inDebugName) : size(inSize) From a97c7ce53a9c6a6eb52357905efc557222c62982 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 14:48:35 +0800 Subject: [PATCH 08/24] fix: use signed base vertex for indexed draws --- .../RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h | 2 +- Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp | 2 +- Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h | 2 +- Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp | 2 +- Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h | 2 +- Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp | 2 +- Engine/Source/RHI/Include/RHI/CommandRecorder.h | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h index b0fd0dc70..50a123052 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/CommandRecorder.h @@ -104,7 +104,7 @@ namespace RHI::DirectX12 { void SetIndexBuffer(BufferView* inBufferView) override; void SetVertexBuffer(size_t inSlot, BufferView* inBufferView) override; void Draw(size_t inVertexCount, size_t inInstanceCount, size_t inFirstVertex, size_t inFirstInstance) override; - void DrawIndexed(size_t inIndexCount, size_t inInstanceCount, size_t inFirstIndex, size_t inBaseVertex, size_t inFirstInstance) override; + void DrawIndexed(size_t inIndexCount, size_t inInstanceCount, size_t inFirstIndex, int32_t inBaseVertex, size_t inFirstInstance) override; void SetViewport(float inX, float inY, float inWidth, float inHeight, float inMinDepth, float inMaxDepth) override; void SetScissor(uint32_t inLeft, uint32_t inTop, uint32_t inRight, uint32_t inBottom) override; void SetPrimitiveTopology(PrimitiveTopology inPrimitiveTopology) override; diff --git a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp index 6275c78ae..ce9719d8c 100644 --- a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp @@ -369,7 +369,7 @@ namespace RHI::DirectX12 { commandBuffer.GetNativeCmdList()->DrawInstanced(inVertexCount, inInstanceCount, inFirstVertex, inFirstInstance); } - void DX12RasterPassCommandRecorder::DrawIndexed(const size_t inIndexCount, const size_t inInstanceCount, const size_t inFirstIndex, const size_t inBaseVertex, const size_t inFirstInstance) + void DX12RasterPassCommandRecorder::DrawIndexed(const size_t inIndexCount, const size_t inInstanceCount, const size_t inFirstIndex, const int32_t inBaseVertex, const size_t inFirstInstance) { commandBuffer.GetNativeCmdList()->DrawIndexedInstanced(inIndexCount, inInstanceCount, inFirstIndex, inBaseVertex, inFirstInstance); } diff --git a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h index a4687454c..35d874af1 100644 --- a/Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h +++ b/Engine/Source/RHI-Dummy/Include/RHI/Dummy/CommandRecorder.h @@ -87,7 +87,7 @@ namespace RHI::Dummy { void SetIndexBuffer(BufferView* bufferView) override; void SetVertexBuffer(size_t slot, BufferView* bufferView) override; void Draw(size_t vertexCount, size_t instanceCount, size_t firstVertex, size_t firstInstance) override; - void DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, size_t baseVertex, size_t firstInstance) override; + void DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, int32_t baseVertex, size_t firstInstance) override; void SetViewport(float topLeftX, float topLeftY, float width, float height, float minDepth, float maxDepth) override; void SetScissor(uint32_t left, uint32_t top, uint32_t right, uint32_t bottom) override; void SetPrimitiveTopology(PrimitiveTopology primitiveTopology) override; diff --git a/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp b/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp index 5922cb660..92d44b98b 100644 --- a/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-Dummy/Src/CommandRecorder.cpp @@ -131,7 +131,7 @@ namespace RHI::Dummy { { } - void DummyRasterPassCommandRecorder::DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, size_t baseVertex, size_t firstInstance) + void DummyRasterPassCommandRecorder::DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, int32_t baseVertex, size_t firstInstance) { } diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h index ff8a83fcf..6ef90401c 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/CommandRecorder.h @@ -106,7 +106,7 @@ namespace RHI::Vulkan { void SetIndexBuffer(BufferView* inBufferView) override; void SetVertexBuffer(size_t inSlot, BufferView* inBufferView) override; void Draw(size_t inVertexCount, size_t inInstanceCount, size_t inFirstVertex, size_t inFirstInstance) override; - void DrawIndexed(size_t inIndexCount, size_t inInstanceCount, size_t inFirstIndex, size_t inBaseVertex, size_t inFirstInstance) override; + void DrawIndexed(size_t inIndexCount, size_t inInstanceCount, size_t inFirstIndex, int32_t inBaseVertex, size_t inFirstInstance) override; void SetViewport(float inX, float inY, float inWidth, float inHeight, float inMinDepth, float inMaxDepth) override; void SetScissor(uint32_t inLeft, uint32_t inTop, uint32_t inRight, uint32_t inBottom) override; void SetPrimitiveTopology(PrimitiveTopology inPrimitiveTopology) override; diff --git a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp index ff577f600..2667a326a 100644 --- a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp @@ -584,7 +584,7 @@ namespace RHI::Vulkan { vkCmdDraw(commandBuffer.GetNative(), inVertexCount, inInstanceCount, inFirstVertex, inFirstInstance); } - void VulkanRasterPassCommandRecorder::DrawIndexed(const size_t inIndexCount, const size_t inInstanceCount, const size_t inFirstIndex, const size_t inBaseVertex, const size_t inFirstInstance) + void VulkanRasterPassCommandRecorder::DrawIndexed(const size_t inIndexCount, const size_t inInstanceCount, const size_t inFirstIndex, const int32_t inBaseVertex, const size_t inFirstInstance) { vkCmdDrawIndexed(commandBuffer.GetNative(), inIndexCount, inInstanceCount, inFirstIndex, inBaseVertex, inFirstInstance); } diff --git a/Engine/Source/RHI/Include/RHI/CommandRecorder.h b/Engine/Source/RHI/Include/RHI/CommandRecorder.h index a68b2e3c6..bc1dc839f 100644 --- a/Engine/Source/RHI/Include/RHI/CommandRecorder.h +++ b/Engine/Source/RHI/Include/RHI/CommandRecorder.h @@ -258,7 +258,7 @@ namespace RHI { virtual void SetIndexBuffer(BufferView* bufferView) = 0; virtual void SetVertexBuffer(size_t slot, BufferView* bufferView) = 0; virtual void Draw(size_t vertexCount, size_t instanceCount, size_t firstVertex, size_t firstInstance) = 0; - virtual void DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, size_t baseVertex, size_t firstInstance) = 0; + virtual void DrawIndexed(size_t indexCount, size_t instanceCount, size_t firstIndex, int32_t baseVertex, size_t firstInstance) = 0; virtual void SetViewport(float topLeftX, float topLeftY, float width, float height, float minDepth, float maxDepth) = 0; virtual void SetScissor(uint32_t left, uint32_t top, uint32_t right, uint32_t bottom) = 0; virtual void SetPrimitiveTopology(PrimitiveTopology primitiveTopology) = 0; From 664a8c8c931f8b5946efb01749c5c8edfb00b99f Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 15:41:40 +0800 Subject: [PATCH 09/24] fix: handle depth stencil copy planes --- .../Include/RHI/DirectX12/Common.h | 2 + .../RHI-DirectX12/Src/CommandRecorder.cpp | 86 ++++++++++++------- Engine/Source/RHI-DirectX12/Src/Common.cpp | 13 ++- Engine/Source/RHI-DirectX12/Src/Device.cpp | 14 ++- Engine/Source/RHI-Dummy/Src/Device.cpp | 8 +- .../Source/RHI-Vulkan/Src/CommandRecorder.cpp | 49 +++++++---- Engine/Source/RHI-Vulkan/Src/Device.cpp | 8 +- .../Source/RHI/Include/RHI/CommandRecorder.h | 4 + Engine/Source/RHI/Include/RHI/Common.h | 3 + Engine/Source/RHI/Src/CommandRecorder.cpp | 22 +++-- Engine/Source/RHI/Src/Common.cpp | 33 +++++++ Engine/Source/Runtime/Src/Asset/Texture.cpp | 35 ++++++++ 12 files changed, 216 insertions(+), 61 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h index 30ca578c8..cb2fbbcc6 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h @@ -18,6 +18,8 @@ namespace RHI::DirectX12 { DECLARE_EC_FUNC() DECLARE_FC_FUNC() + uint32_t GetDX12TexturePlaneSlice(TextureAspect aspect); + ECIMPL_BEGIN(QueueType, D3D12_COMMAND_LIST_TYPE) ECIMPL_ITEM(QueueType::graphics, D3D12_COMMAND_LIST_TYPE_DIRECT) ECIMPL_ITEM(QueueType::compute, D3D12_COMMAND_LIST_TYPE_COMPUTE) diff --git a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp index ce9719d8c..1cecd0cc2 100644 --- a/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-DirectX12/Src/CommandRecorder.cpp @@ -37,7 +37,7 @@ namespace RHI::DirectX12 { static size_t GetNativeSubResourceIndex(const DX12Texture& texture, const TextureSubResourceInfo& subResource) { const auto& createInfo = texture.GetCreateInfo(); - return D3D12CalcSubresource(subResource.mipLevel, subResource.arrayLayer, 0, createInfo.mipLevels, createInfo.type == TextureType::t3D ? 1 : createInfo.depthOrArraySize); + return D3D12CalcSubresource(subResource.mipLevel, subResource.arrayLayer, GetDX12TexturePlaneSlice(subResource.aspect), createInfo.mipLevels, createInfo.type == TextureType::t3D ? 1 : createInfo.depthOrArraySize); } static CD3DX12_TEXTURE_COPY_LOCATION GetNativeTextureCopyLocation(const DX12Texture& texture, const TextureSubResourceInfo& subResource) @@ -45,14 +45,20 @@ namespace RHI::DirectX12 { return { texture.GetNative(), static_cast(GetNativeSubResourceIndex(texture, subResource)) }; } - static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTextureLayout(const DX12Buffer& buffer, const DX12Texture& texture, const BufferTextureCopyInfo& copyInfo) + static CD3DX12_TEXTURE_COPY_LOCATION GetNativeBufferCopyLocationFromTextureLayout(DX12Device& device, const DX12Buffer& buffer, const DX12Texture& texture, const BufferTextureCopyInfo& copyInfo, const TextureAspect aspect, const size_t aspectIndex) { + Assert(aspect != TextureAspect::depthStencil); Assert(copyInfo.bufferOffset % D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT == 0); Assert(copyInfo.bufferRowPitch % D3D12_TEXTURE_DATA_PITCH_ALIGNMENT == 0); + const auto planeBytes = copyInfo.bufferSlicePitch * copyInfo.copyRegion.z; + Assert(aspectIndex == 0 || planeBytes % D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT == 0); + + const auto subResource = TextureSubResourceInfo(copyInfo.textureSubResource.mipLevel, copyInfo.textureSubResource.arrayLayer, aspect); + const auto nativeResourceDesc = texture.GetNative()->GetDesc(); D3D12_PLACED_SUBRESOURCE_FOOTPRINT bufferLayout; - bufferLayout.Offset = copyInfo.bufferOffset; - bufferLayout.Footprint.Format = texture.GetNative()->GetDesc().Format; + device.GetNative()->GetCopyableFootprints(&nativeResourceDesc, static_cast(GetNativeSubResourceIndex(texture, subResource)), 1, copyInfo.bufferOffset + planeBytes * aspectIndex, &bufferLayout, nullptr, nullptr, nullptr); + Assert(bufferLayout.Offset == copyInfo.bufferOffset + planeBytes * aspectIndex); bufferLayout.Footprint.Width = copyInfo.copyRegion.x; bufferLayout.Footprint.Height = static_cast(copyInfo.bufferSlicePitch / copyInfo.bufferRowPitch); bufferLayout.Footprint.Depth = copyInfo.copyRegion.z; @@ -121,17 +127,21 @@ namespace RHI::DirectX12 { const auto* dstTexture = static_cast(dst); RHI::Internal::ValidateBufferTextureCopy(*src, *dst, copyInfo); - const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(*srcBuffer, *dstTexture, copyInfo); - const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeTextureCopyLocation(*dstTexture, copyInfo.textureSubResource); const D3D12_BOX srcBox = GetNativeBox(Common::UVec3Consts::zero, copyInfo.copyRegion); - - commandBuffer.GetNativeCmdList()->CopyTextureRegion( - &dstCopyRegion, - copyInfo.textureOrigin.x, - copyInfo.textureOrigin.y, - copyInfo.textureOrigin.z, - &srcCopyRegion, - &srcBox); + const auto aspects = GetTextureAspectComponents(copyInfo.textureSubResource.aspect); + for (size_t aspectIndex = 0; aspectIndex < aspects.size(); aspectIndex++) { + const auto subResource = TextureSubResourceInfo(copyInfo.textureSubResource.mipLevel, copyInfo.textureSubResource.arrayLayer, aspects[aspectIndex]); + const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(device, *srcBuffer, *dstTexture, copyInfo, aspects[aspectIndex], aspectIndex); + const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeTextureCopyLocation(*dstTexture, subResource); + + commandBuffer.GetNativeCmdList()->CopyTextureRegion( + &dstCopyRegion, + copyInfo.textureOrigin.x, + copyInfo.textureOrigin.y, + copyInfo.textureOrigin.z, + &srcCopyRegion, + &srcBox); + } } void DX12CopyPassCommandRecorder::CopyTextureToBuffer(Texture* src, Buffer* dst, const BufferTextureCopyInfo& copyInfo) @@ -139,16 +149,20 @@ namespace RHI::DirectX12 { const auto* srcTexture = static_cast(src); const auto* dstBuffer = static_cast(dst); - const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeTextureCopyLocation(*srcTexture, copyInfo.textureSubResource); RHI::Internal::ValidateBufferTextureCopy(*dst, *src, copyInfo); - const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(*dstBuffer, *srcTexture, copyInfo); const D3D12_BOX srcBox = GetNativeBox(copyInfo.textureOrigin, copyInfo.copyRegion); - - commandBuffer.GetNativeCmdList()->CopyTextureRegion( - &dstCopyRegion, - 0, 0, 0, - &srcCopyRegion, - &srcBox); + const auto aspects = GetTextureAspectComponents(copyInfo.textureSubResource.aspect); + for (size_t aspectIndex = 0; aspectIndex < aspects.size(); aspectIndex++) { + const auto subResource = TextureSubResourceInfo(copyInfo.textureSubResource.mipLevel, copyInfo.textureSubResource.arrayLayer, aspects[aspectIndex]); + const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeTextureCopyLocation(*srcTexture, subResource); + const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeBufferCopyLocationFromTextureLayout(device, *dstBuffer, *srcTexture, copyInfo, aspects[aspectIndex], aspectIndex); + + commandBuffer.GetNativeCmdList()->CopyTextureRegion( + &dstCopyRegion, + 0, 0, 0, + &srcCopyRegion, + &srcBox); + } } void DX12CopyPassCommandRecorder::CopyTextureToTexture(Texture* src, Texture* dst, const TextureCopyInfo& copyInfo) @@ -156,17 +170,25 @@ namespace RHI::DirectX12 { const auto* srcTexture = static_cast(src); const auto* dstTexture = static_cast(dst); - const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeTextureCopyLocation(*srcTexture, copyInfo.srcSubResource); - const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeTextureCopyLocation(*dstTexture, copyInfo.dstSubResource); const D3D12_BOX srcBox = GetNativeBox(copyInfo.srcOrigin, copyInfo.copyRegion); - - commandBuffer.GetNativeCmdList()->CopyTextureRegion( - &dstCopyRegion, - copyInfo.dstOrigin.x, - copyInfo.dstOrigin.y, - copyInfo.dstOrigin.z, - &srcCopyRegion, - &srcBox); + const auto srcAspects = GetTextureAspectComponents(copyInfo.srcSubResource.aspect); + const auto dstAspects = GetTextureAspectComponents(copyInfo.dstSubResource.aspect); + Assert(srcAspects.size() == dstAspects.size()); + for (size_t aspectIndex = 0; aspectIndex < srcAspects.size(); aspectIndex++) { + Assert(srcAspects[aspectIndex] == dstAspects[aspectIndex]); + const auto srcSubResource = TextureSubResourceInfo(copyInfo.srcSubResource.mipLevel, copyInfo.srcSubResource.arrayLayer, srcAspects[aspectIndex]); + const auto dstSubResource = TextureSubResourceInfo(copyInfo.dstSubResource.mipLevel, copyInfo.dstSubResource.arrayLayer, dstAspects[aspectIndex]); + const CD3DX12_TEXTURE_COPY_LOCATION srcCopyRegion = GetNativeTextureCopyLocation(*srcTexture, srcSubResource); + const CD3DX12_TEXTURE_COPY_LOCATION dstCopyRegion = GetNativeTextureCopyLocation(*dstTexture, dstSubResource); + + commandBuffer.GetNativeCmdList()->CopyTextureRegion( + &dstCopyRegion, + copyInfo.dstOrigin.x, + copyInfo.dstOrigin.y, + copyInfo.dstOrigin.z, + &srcCopyRegion, + &srcBox); + } } void DX12CopyPassCommandRecorder::EndPass() diff --git a/Engine/Source/RHI-DirectX12/Src/Common.cpp b/Engine/Source/RHI-DirectX12/Src/Common.cpp index 159c57e50..75b6ae6a6 100644 --- a/Engine/Source/RHI-DirectX12/Src/Common.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Common.cpp @@ -5,5 +5,16 @@ #include namespace RHI::DirectX12 { - + uint32_t GetDX12TexturePlaneSlice(const TextureAspect aspect) + { + switch (aspect) { + case TextureAspect::color: + case TextureAspect::depth: + return 0; + case TextureAspect::stencil: + return 1; + default: + return Assert(false), 0; + } + } } diff --git a/Engine/Source/RHI-DirectX12/Src/Device.cpp b/Engine/Source/RHI-DirectX12/Src/Device.cpp index 536fb5413..e6f824206 100644 --- a/Engine/Source/RHI-DirectX12/Src/Device.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Device.cpp @@ -2,6 +2,7 @@ // Created by johnk on 15/1/2022. // +#include #include #include @@ -287,7 +288,8 @@ namespace RHI::DirectX12 { const auto nativeResourceDesc = dx12Texture.GetNative()->GetDesc(); const auto arraySize = createInfo.type == TextureType::t3D ? 1 : createInfo.depthOrArraySize; - const size_t nativeSubResourceIndex = D3D12CalcSubresource(subResourceInfo.mipLevel, subResourceInfo.arrayLayer, 0, createInfo.mipLevels, arraySize); + const auto aspects = GetTextureAspectComponents(subResourceInfo.aspect); + const size_t nativeSubResourceIndex = D3D12CalcSubresource(subResourceInfo.mipLevel, subResourceInfo.arrayLayer, GetDX12TexturePlaneSlice(aspects.front()), createInfo.mipLevels, arraySize); D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint; nativeDevice->GetCopyableFootprints(&nativeResourceDesc, nativeSubResourceIndex, 1, 0, &footprint, nullptr, nullptr, nullptr); @@ -299,10 +301,16 @@ namespace RHI::DirectX12 { TextureSubResourceCopyFootprint result {}; result.extent = extent; - result.bytesPerPixel = GetBytesPerPixel(createInfo.format); + result.bytesPerPixel = 0; + for (const auto aspect : aspects) { + result.bytesPerPixel = std::max(result.bytesPerPixel, GetTextureAspectBytesPerPixel(createInfo.format, aspect)); + } result.rowPitch = Common::AlignUp(result.bytesPerPixel * result.extent.x, static_cast(D3D12_TEXTURE_DATA_PITCH_ALIGNMENT)); result.slicePitch = result.rowPitch * result.extent.y; - result.totalBytes = result.slicePitch * result.extent.z; + if (aspects.size() > 1 && result.slicePitch % D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT != 0) { + result.slicePitch += result.rowPitch; + } + result.totalBytes = result.slicePitch * result.extent.z * aspects.size(); return result; } diff --git a/Engine/Source/RHI-Dummy/Src/Device.cpp b/Engine/Source/RHI-Dummy/Src/Device.cpp index f27371664..77f0e6928 100644 --- a/Engine/Source/RHI-Dummy/Src/Device.cpp +++ b/Engine/Source/RHI-Dummy/Src/Device.cpp @@ -149,10 +149,14 @@ namespace RHI::Dummy { TextureSubResourceCopyFootprint result {}; result.extent = extent; - result.bytesPerPixel = GetBytesPerPixel(createInfo.format); + const auto aspects = GetTextureAspectComponents(subResourceInfo.aspect); + result.bytesPerPixel = 0; + for (const auto aspect : aspects) { + result.bytesPerPixel = std::max(result.bytesPerPixel, GetTextureAspectBytesPerPixel(createInfo.format, aspect)); + } result.rowPitch = result.bytesPerPixel * result.extent.x; result.slicePitch = result.rowPitch * result.extent.y; - result.totalBytes = result.slicePitch * result.extent.z; + result.totalBytes = result.slicePitch * result.extent.z * aspects.size(); return result; } } diff --git a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp index 2667a326a..9294c8d58 100644 --- a/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI-Vulkan/Src/CommandRecorder.cpp @@ -152,17 +152,22 @@ namespace RHI::Vulkan { return result; } - static VkBufferImageCopy GetNativeBufferImageCopy(const Texture& texture, const BufferTextureCopyInfo& copyInfo) + static VkBufferImageCopy GetNativeBufferImageCopy(const Texture& texture, const BufferTextureCopyInfo& copyInfo, const TextureAspect aspect, const size_t aspectIndex) { - const auto bytesPerPixel = GetBytesPerPixel(texture.GetCreateInfo().format); + Assert(aspect != TextureAspect::depthStencil); + const auto bytesPerPixel = GetTextureAspectBytesPerPixel(texture.GetCreateInfo().format, aspect); + const auto planeBytes = copyInfo.bufferSlicePitch * copyInfo.copyRegion.z; + if (aspect == TextureAspect::depth || aspect == TextureAspect::stencil) { + Assert((copyInfo.bufferOffset + planeBytes * aspectIndex) % 4 == 0); + } VkBufferImageCopy result {}; - result.bufferOffset = copyInfo.bufferOffset; + result.bufferOffset = copyInfo.bufferOffset + planeBytes * aspectIndex; result.bufferRowLength = static_cast(copyInfo.bufferRowPitch / bytesPerPixel); result.bufferImageHeight = static_cast(copyInfo.bufferSlicePitch / copyInfo.bufferRowPitch); result.imageOffset = { static_cast(copyInfo.textureOrigin.x), static_cast(copyInfo.textureOrigin.y), static_cast(copyInfo.textureOrigin.z) }; result.imageExtent = { copyInfo.copyRegion.x, copyInfo.copyRegion.y, copyInfo.copyRegion.z }; - result.imageSubresource = GetNativeImageSubResourceLayers(copyInfo.textureSubResource); + result.imageSubresource = GetNativeImageSubResourceLayers(TextureSubResourceInfo(copyInfo.textureSubResource.mipLevel, copyInfo.textureSubResource.arrayLayer, aspect)); return result; } } @@ -331,8 +336,11 @@ namespace RHI::Vulkan { const auto* dstTexture = static_cast(dst); RHI::Internal::ValidateBufferTextureCopy(*src, *dst, copyInfo); - const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*dst, copyInfo); - vkCmdCopyBufferToImage(commandBuffer.GetNative(), srcBuffer->GetNative(), dstTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &nativeBufferImageCopy); + const auto aspects = GetTextureAspectComponents(copyInfo.textureSubResource.aspect); + for (size_t aspectIndex = 0; aspectIndex < aspects.size(); aspectIndex++) { + const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*dst, copyInfo, aspects[aspectIndex], aspectIndex); + vkCmdCopyBufferToImage(commandBuffer.GetNative(), srcBuffer->GetNative(), dstTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &nativeBufferImageCopy); + } } void VulkanCopyPassCommandRecorder::CopyTextureToBuffer(Texture* src, Buffer* dst, const BufferTextureCopyInfo& copyInfo) @@ -341,8 +349,11 @@ namespace RHI::Vulkan { const auto* dstBuffer = static_cast(dst); RHI::Internal::ValidateBufferTextureCopy(*dst, *src, copyInfo); - const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*src, copyInfo); - vkCmdCopyImageToBuffer(commandBuffer.GetNative(), srcTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstBuffer->GetNative(), 1, &nativeBufferImageCopy); + const auto aspects = GetTextureAspectComponents(copyInfo.textureSubResource.aspect); + for (size_t aspectIndex = 0; aspectIndex < aspects.size(); aspectIndex++) { + const VkBufferImageCopy nativeBufferImageCopy = GetNativeBufferImageCopy(*src, copyInfo, aspects[aspectIndex], aspectIndex); + vkCmdCopyImageToBuffer(commandBuffer.GetNative(), srcTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstBuffer->GetNative(), 1, &nativeBufferImageCopy); + } } void VulkanCopyPassCommandRecorder::CopyTextureToTexture(Texture* src, Texture* dst, const TextureCopyInfo& copyInfo) @@ -350,14 +361,20 @@ namespace RHI::Vulkan { const auto* srcTexture = static_cast(src); const auto* dstTexture = static_cast(dst); - VkImageCopy nativeImageCopy {}; - nativeImageCopy.srcSubresource = GetNativeImageSubResourceLayers(copyInfo.srcSubResource); - nativeImageCopy.srcOffset = { static_cast(copyInfo.srcOrigin.x), static_cast(copyInfo.srcOrigin.y), static_cast(copyInfo.srcOrigin.z) }; - nativeImageCopy.dstSubresource = GetNativeImageSubResourceLayers(copyInfo.dstSubResource); - nativeImageCopy.dstOffset = { static_cast(copyInfo.dstOrigin.x), static_cast(copyInfo.dstOrigin.y), static_cast(copyInfo.dstOrigin.z) }; - nativeImageCopy.extent = { copyInfo.copyRegion.x, copyInfo.copyRegion.y, copyInfo.copyRegion.z }; - - vkCmdCopyImage(commandBuffer.GetNative(), srcTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &nativeImageCopy); + const auto srcAspects = GetTextureAspectComponents(copyInfo.srcSubResource.aspect); + const auto dstAspects = GetTextureAspectComponents(copyInfo.dstSubResource.aspect); + Assert(srcAspects.size() == dstAspects.size()); + for (size_t aspectIndex = 0; aspectIndex < srcAspects.size(); aspectIndex++) { + Assert(srcAspects[aspectIndex] == dstAspects[aspectIndex]); + VkImageCopy nativeImageCopy {}; + nativeImageCopy.srcSubresource = GetNativeImageSubResourceLayers(TextureSubResourceInfo(copyInfo.srcSubResource.mipLevel, copyInfo.srcSubResource.arrayLayer, srcAspects[aspectIndex])); + nativeImageCopy.srcOffset = { static_cast(copyInfo.srcOrigin.x), static_cast(copyInfo.srcOrigin.y), static_cast(copyInfo.srcOrigin.z) }; + nativeImageCopy.dstSubresource = GetNativeImageSubResourceLayers(TextureSubResourceInfo(copyInfo.dstSubResource.mipLevel, copyInfo.dstSubResource.arrayLayer, dstAspects[aspectIndex])); + nativeImageCopy.dstOffset = { static_cast(copyInfo.dstOrigin.x), static_cast(copyInfo.dstOrigin.y), static_cast(copyInfo.dstOrigin.z) }; + nativeImageCopy.extent = { copyInfo.copyRegion.x, copyInfo.copyRegion.y, copyInfo.copyRegion.z }; + + vkCmdCopyImage(commandBuffer.GetNative(), srcTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, dstTexture->GetNative(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &nativeImageCopy); + } } void VulkanCopyPassCommandRecorder::EndPass() diff --git a/Engine/Source/RHI-Vulkan/Src/Device.cpp b/Engine/Source/RHI-Vulkan/Src/Device.cpp index 925287f7c..2e2976019 100644 --- a/Engine/Source/RHI-Vulkan/Src/Device.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Device.cpp @@ -248,10 +248,14 @@ namespace RHI::Vulkan { TextureSubResourceCopyFootprint result {}; result.extent = extent; - result.bytesPerPixel = GetBytesPerPixel(createInfo.format); + const auto aspects = GetTextureAspectComponents(subResourceInfo.aspect); + result.bytesPerPixel = 0; + for (const auto aspect : aspects) { + result.bytesPerPixel = std::max(result.bytesPerPixel, GetTextureAspectBytesPerPixel(createInfo.format, aspect)); + } result.rowPitch = result.bytesPerPixel * result.extent.x; result.slicePitch = result.rowPitch * result.extent.y; - result.totalBytes = result.slicePitch * result.extent.z; + result.totalBytes = result.slicePitch * result.extent.z * aspects.size(); return result; } diff --git a/Engine/Source/RHI/Include/RHI/CommandRecorder.h b/Engine/Source/RHI/Include/RHI/CommandRecorder.h index bc1dc839f..d8be9152c 100644 --- a/Engine/Source/RHI/Include/RHI/CommandRecorder.h +++ b/Engine/Source/RHI/Include/RHI/CommandRecorder.h @@ -38,6 +38,8 @@ namespace RHI { struct TextureSubResourceCopyFootprint { Common::UVec3 extent; + // For depthStencil this is the larger per-plane element size. The layout contains depth followed by stencil, + // with both planes using rowPitch and slicePitch; totalBytes covers all planes. size_t bytesPerPixel; size_t rowPitch; size_t slicePitch; @@ -222,6 +224,8 @@ namespace RHI { virtual void CopyBufferToBuffer(Buffer* src, Buffer* dst, const BufferCopyInfo& copyInfo) = 0; // The buffer layout starts at bufferOffset and is described explicitly by bufferRowPitch and bufferSlicePitch. + // A combined depth-stencil copy stores the depth plane first and the stencil plane second. Each plane occupies + // bufferSlicePitch * copyRegion.z bytes and uses the same row and slice pitches. virtual void CopyBufferToTexture(Buffer* src, Texture* dst, const BufferTextureCopyInfo& copyInfo) = 0; virtual void CopyTextureToBuffer(Texture* src, Buffer* dst, const BufferTextureCopyInfo& copyInfo) = 0; virtual void CopyTextureToTexture(Texture* src, Texture* dst, const TextureCopyInfo& copyInfo) = 0; diff --git a/Engine/Source/RHI/Include/RHI/Common.h b/Engine/Source/RHI/Include/RHI/Common.h index aa2f8875b..c5d05fcf2 100644 --- a/Engine/Source/RHI/Include/RHI/Common.h +++ b/Engine/Source/RHI/Include/RHI/Common.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include @@ -498,6 +499,8 @@ namespace RHI { namespace RHI { size_t GetBytesPerPixel(PixelFormat format); + size_t GetTextureAspectBytesPerPixel(PixelFormat format, TextureAspect aspect); TextureAspect GetTextureAspect(PixelFormat format); + std::span GetTextureAspectComponents(TextureAspect aspect); TextureState GetDepthStencilTextureState(TextureAspect aspect, bool depthReadOnly, bool stencilReadOnly); } diff --git a/Engine/Source/RHI/Src/CommandRecorder.cpp b/Engine/Source/RHI/Src/CommandRecorder.cpp index ce2c8d9fc..0da4dc05c 100644 --- a/Engine/Source/RHI/Src/CommandRecorder.cpp +++ b/Engine/Source/RHI/Src/CommandRecorder.cpp @@ -15,6 +15,13 @@ namespace RHI::Internal { const auto& textureCreateInfo = texture.GetCreateInfo(); Assert(copyInfo.textureSubResource.mipLevel < textureCreateInfo.mipLevels); + const auto textureAspect = GetTextureAspect(textureCreateInfo.format); + const auto copyAspects = GetTextureAspectComponents(copyInfo.textureSubResource.aspect); + const auto textureAspects = GetTextureAspectComponents(textureAspect); + for (const auto copyAspect : copyAspects) { + Assert(std::ranges::find(textureAspects, copyAspect) != textureAspects.end()); + } + const auto arraySize = textureCreateInfo.type == TextureType::t3D ? 1u : textureCreateInfo.depthOrArraySize; Assert(copyInfo.textureSubResource.arrayLayer < arraySize); @@ -31,10 +38,12 @@ namespace RHI::Internal { Assert(copyInfo.textureOrigin.y <= subResourceExtent.y && copyInfo.copyRegion.y <= subResourceExtent.y - copyInfo.textureOrigin.y); Assert(copyInfo.textureOrigin.z <= subResourceExtent.z && copyInfo.copyRegion.z <= subResourceExtent.z - copyInfo.textureOrigin.z); - const auto bytesPerPixel = GetBytesPerPixel(textureCreateInfo.format); - Assert(copyInfo.copyRegion.x <= std::numeric_limits::max() / bytesPerPixel); - const auto packedRowPitch = bytesPerPixel * copyInfo.copyRegion.x; - Assert(copyInfo.bufferRowPitch >= packedRowPitch && copyInfo.bufferRowPitch % bytesPerPixel == 0); + for (const auto copyAspect : copyAspects) { + const auto bytesPerPixel = GetTextureAspectBytesPerPixel(textureCreateInfo.format, copyAspect); + Assert(copyInfo.copyRegion.x <= std::numeric_limits::max() / bytesPerPixel); + const auto packedRowPitch = bytesPerPixel * copyInfo.copyRegion.x; + Assert(copyInfo.bufferRowPitch >= packedRowPitch && copyInfo.bufferRowPitch % bytesPerPixel == 0); + } Assert(copyInfo.copyRegion.y <= std::numeric_limits::max() / copyInfo.bufferRowPitch); Assert(copyInfo.bufferSlicePitch >= copyInfo.bufferRowPitch * copyInfo.copyRegion.y); Assert(copyInfo.bufferSlicePitch % copyInfo.bufferRowPitch == 0); @@ -43,7 +52,10 @@ namespace RHI::Internal { const auto bufferSize = static_cast(buffer.GetCreateInfo().size); Assert(copyInfo.bufferOffset <= bufferSize); - Assert(copyInfo.bufferSlicePitch <= (bufferSize - copyInfo.bufferOffset) / copyInfo.copyRegion.z); + Assert(copyInfo.bufferSlicePitch <= std::numeric_limits::max() / copyInfo.copyRegion.z); + const auto planeBytes = copyInfo.bufferSlicePitch * copyInfo.copyRegion.z; + Assert(planeBytes <= std::numeric_limits::max() / copyAspects.size()); + Assert(planeBytes * copyAspects.size() <= bufferSize - copyInfo.bufferOffset); } } diff --git a/Engine/Source/RHI/Src/Common.cpp b/Engine/Source/RHI/Src/Common.cpp index eac789f14..6a795c255 100644 --- a/Engine/Source/RHI/Src/Common.cpp +++ b/Engine/Source/RHI/Src/Common.cpp @@ -28,6 +28,18 @@ namespace RHI { return Assert(false), 1; } + size_t GetTextureAspectBytesPerPixel(const PixelFormat format, const TextureAspect aspect) + { + const auto textureAspect = GetTextureAspect(format); + if (textureAspect == TextureAspect::depthStencil) { + Assert(aspect == TextureAspect::depth || aspect == TextureAspect::stencil); + return aspect == TextureAspect::depth ? 4 : 1; + } + + Assert(aspect == textureAspect); + return GetBytesPerPixel(format); + } + TextureAspect GetTextureAspect(const PixelFormat format) { switch (format) { @@ -42,6 +54,27 @@ namespace RHI { } } + std::span GetTextureAspectComponents(const TextureAspect aspect) + { + static constexpr TextureAspect color[] = { TextureAspect::color }; + static constexpr TextureAspect depth[] = { TextureAspect::depth }; + static constexpr TextureAspect stencil[] = { TextureAspect::stencil }; + static constexpr TextureAspect depthStencil[] = { TextureAspect::depth, TextureAspect::stencil }; + + switch (aspect) { + case TextureAspect::color: + return color; + case TextureAspect::depth: + return depth; + case TextureAspect::stencil: + return stencil; + case TextureAspect::depthStencil: + return depthStencil; + default: + return Assert(false), std::span(); + } + } + TextureState GetDepthStencilTextureState(const TextureAspect aspect, const bool depthReadOnly, const bool stencilReadOnly) { if (aspect == TextureAspect::depth) { diff --git a/Engine/Source/Runtime/Src/Asset/Texture.cpp b/Engine/Source/Runtime/Src/Asset/Texture.cpp index 2ddb54f9c..671d65d23 100644 --- a/Engine/Source/Runtime/Src/Asset/Texture.cpp +++ b/Engine/Source/Runtime/Src/Asset/Texture.cpp @@ -56,6 +56,36 @@ namespace Runtime::Internal { { return inMipLevel * inTotalArrayLayer + inArrayLayer; // NOLINT } + + static void CopyDepthStencilSubResourceToStaging(const TextureFormat format, const std::vector& srcPixels, uint8_t* dstData, const RHI::TextureSubResourceCopyFootprint& footprint) + { + Assert(IsDepthAndStencilFormat(format)); + const auto srcBytesPerPixel = RHI::GetBytesPerPixel(static_cast(format)); + const auto srcRowPitch = footprint.extent.x * srcBytesPerPixel; + const auto srcSlicePitch = srcRowPitch * footprint.extent.y; + const auto planeBytes = footprint.slicePitch * footprint.extent.z; + auto* dstStencilPlane = dstData + planeBytes; + + for (auto z = 0u; z < footprint.extent.z; z++) { + for (auto y = 0u; y < footprint.extent.y; y++) { + const auto* srcRow = srcPixels.data() + srcSlicePitch * z + srcRowPitch * y; + auto* dstDepthRow = dstData + footprint.slicePitch * z + footprint.rowPitch * y; + auto* dstStencilRow = dstStencilPlane + footprint.slicePitch * z + footprint.rowPitch * y; + for (auto x = 0u; x < footprint.extent.x; x++) { + const auto* srcPixel = srcRow + srcBytesPerPixel * x; + auto* dstDepthPixel = dstDepthRow + 4 * x; + if (format == TextureFormat::d24UnormS8Uint) { + memcpy(dstDepthPixel, srcPixel, 3); + dstDepthPixel[3] = 0; + dstStencilRow[x] = srcPixel[3]; + } else { + memcpy(dstDepthPixel, srcPixel, 4); + dstStencilRow[x] = srcPixel[4]; + } + } + } + } + } } namespace Runtime { @@ -282,6 +312,11 @@ namespace Runtime { const auto& dstCopyFootprint = copyFootprints[subResourceIndex]; const auto dstSubResourceOffset = copyOffsets[subResourceIndex]; + if (Internal::IsDepthAndStencilFormat(format)) { + Internal::CopyDepthStencilSubResourceToStaging(format, srcPixels, dstData + dstSubResourceOffset, dstCopyFootprint); + continue; + } + const auto srcRowPitch = dstCopyFootprint.extent.x * bytesPerPixel; const auto srcSlicePitch = srcRowPitch * dstCopyFootprint.extent.y; for (auto z = 0u; z < dstCopyFootprint.extent.z; z++) { From 637dfd1f2caaa8a8e509b1a360cbcb860f55cdaf Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 15:53:41 +0800 Subject: [PATCH 10/24] feat: expose advanced shader features --- Engine/Source/RHI-DirectX12/Src/Gpu.cpp | 4 +++- Engine/Source/RHI-Vulkan/Src/Gpu.cpp | 2 ++ Engine/Source/RHI/Include/RHI/Common.h | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Src/Gpu.cpp b/Engine/Source/RHI-DirectX12/Src/Gpu.cpp index 363395b27..871bfc98c 100644 --- a/Engine/Source/RHI-DirectX12/Src/Gpu.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Gpu.cpp @@ -34,7 +34,9 @@ namespace RHI::DirectX12 { | FeatureBits::timestampQuery | FeatureBits::multiDrawIndirect | FeatureBits::drawIndirectFirstInstance - | FeatureBits::textureCubeArray; + | FeatureBits::textureCubeArray + | FeatureBits::geometryShader + | FeatureBits::tessellationShader; } GpuLimits DX12Gpu::GetLimits() diff --git a/Engine/Source/RHI-Vulkan/Src/Gpu.cpp b/Engine/Source/RHI-Vulkan/Src/Gpu.cpp index 482312ad7..a330dffe2 100644 --- a/Engine/Source/RHI-Vulkan/Src/Gpu.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Gpu.cpp @@ -44,6 +44,8 @@ namespace RHI::Vulkan { if (features.multiDrawIndirect) { result = result | FeatureBits::multiDrawIndirect; } if (features.drawIndirectFirstInstance) { result = result | FeatureBits::drawIndirectFirstInstance; } if (features.imageCubeArray) { result = result | FeatureBits::textureCubeArray; } + if (features.geometryShader) { result = result | FeatureBits::geometryShader; } + if (features.tessellationShader) { result = result | FeatureBits::tessellationShader; } return result; } diff --git a/Engine/Source/RHI/Include/RHI/Common.h b/Engine/Source/RHI/Include/RHI/Common.h index c5d05fcf2..e72f2496a 100644 --- a/Engine/Source/RHI/Include/RHI/Common.h +++ b/Engine/Source/RHI/Include/RHI/Common.h @@ -491,7 +491,9 @@ namespace RHI { multiDrawIndirect = 0x8, drawIndirectFirstInstance = 0x10, textureCubeArray = 0x20, - max = 0x40 + geometryShader = 0x40, + tessellationShader = 0x80, + max = 0x100 }; using FeatureFlags = Common::Flags; DECLARE_FLAG_BITS_OP(FeatureFlags, FeatureBits) From d662b8b7ab7225fea4c52c6eb22bd1563bfbf46e Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 16:18:48 +0800 Subject: [PATCH 11/24] fix: implement primitive strip restart state --- .../RHI-DirectX12/Include/RHI/DirectX12/Common.h | 6 ++++++ Engine/Source/RHI-DirectX12/Src/Pipeline.cpp | 1 + Engine/Source/RHI-Vulkan/Src/Pipeline.cpp | 12 ++++++++++-- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h index cb2fbbcc6..aeea8bb09 100644 --- a/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h +++ b/Engine/Source/RHI-DirectX12/Include/RHI/DirectX12/Common.h @@ -242,6 +242,12 @@ namespace RHI::DirectX12 { ECIMPL_ITEM(IndexFormat::uint32, DXGI_FORMAT_R32_UINT) ECIMPL_END(DXGI_FORMAT) + ECIMPL_BEGIN(IndexFormat, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) + ECIMPL_ITEM(IndexFormat::uint16, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFF) + ECIMPL_ITEM(IndexFormat::uint32, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_0xFFFFFFFF) + ECIMPL_ITEM(IndexFormat::max, D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED) + ECIMPL_END(D3D12_INDEX_BUFFER_STRIP_CUT_VALUE) + ECIMPL_BEGIN(VertexStepMode, D3D12_INPUT_CLASSIFICATION) ECIMPL_ITEM(VertexStepMode::perVertex, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA) ECIMPL_ITEM(VertexStepMode::perInstance, D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA) diff --git a/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp b/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp index 4708d6f40..606ffadf4 100644 --- a/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Pipeline.cpp @@ -228,6 +228,7 @@ namespace RHI::DirectX12 { desc.SampleMask = GetDX12SampleMask(inCreateInfo); desc.SampleDesc = GetDX12SampleDesc(inCreateInfo); desc.PrimitiveTopologyType = EnumCast(inCreateInfo.primitiveState.topologyType); + desc.IBStripCutValue = EnumCast(inCreateInfo.primitiveState.stripIndexFormat); UpdateDX12RenderTargetsDesc(desc, inCreateInfo); UpdateDX12DepthStencilTargetDesc(desc, inCreateInfo); auto inputElements = GetDX12InputElements(inCreateInfo); diff --git a/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp b/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp index 75cce0ee1..745f68f22 100644 --- a/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Pipeline.cpp @@ -46,10 +46,18 @@ namespace RHI::Vulkan { static VkPipelineInputAssemblyStateCreateInfo ConstructInputAssembly(const RasterPipelineCreateInfo& createInfo) { + const auto topologyType = createInfo.primitiveState.topologyType; + const bool stripTopology = topologyType == PrimitiveTopologyType::line || topologyType == PrimitiveTopologyType::triangle; + const bool primitiveRestartEnabled = stripTopology && createInfo.primitiveState.stripIndexFormat != IndexFormat::max; + VkPipelineInputAssemblyStateCreateInfo assemblyInfo = {}; assemblyInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; - assemblyInfo.topology = EnumCast(createInfo.primitiveState.topologyType); - assemblyInfo.primitiveRestartEnable = VK_FALSE; + assemblyInfo.topology = EnumCast(topologyType); + assemblyInfo.primitiveRestartEnable = primitiveRestartEnabled ? VK_TRUE : VK_FALSE; + if (primitiveRestartEnabled) { + // Vulkan validates primitive restart against this value even when the topology is dynamic. + assemblyInfo.topology = topologyType == PrimitiveTopologyType::line ? VK_PRIMITIVE_TOPOLOGY_LINE_STRIP : VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; + } return assemblyInfo; } From ed2f7a36ef268e147024cadef695dc5f2b253015 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Mon, 17 Aug 2026 16:38:41 +0800 Subject: [PATCH 12/24] fix: validate Vulkan present queue support --- Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h | 4 +++- Engine/Source/RHI-Vulkan/Src/Device.cpp | 2 +- Engine/Source/RHI-Vulkan/Src/Queue.cpp | 8 +++++++- Engine/Source/RHI-Vulkan/Src/SwapChain.cpp | 4 ++++ 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h index d2554814d..39e638b2a 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Queue.h @@ -18,12 +18,13 @@ namespace RHI::Vulkan { class VulkanQueue final : public Queue { public: NonCopyable(VulkanQueue) - VulkanQueue(VulkanDevice& inDevice, QueueType inType, VkQueue inNativeQueue, std::shared_ptr inNativeQueueMutex); + VulkanQueue(VulkanDevice& inDevice, QueueType inType, uint32_t inFamilyIndex, VkQueue inNativeQueue, std::shared_ptr inNativeQueueMutex); ~VulkanQueue() override; void Flush(Fence* inFenceToSignal) override; float GetTimestampPeriod() override; + uint32_t GetFamilyIndex() const; VkQueue GetNative() const; VkResult Present(const VkPresentInfoKHR& inPresentInfo) const; void WaitIdle() const; @@ -32,6 +33,7 @@ namespace RHI::Vulkan { void SubmitInternal(CommandBuffer* inCmdBuffer, const QueueSubmitInfo& inSubmitInfo) override; VulkanDevice& device; + uint32_t familyIndex; VkQueue nativeQueue; std::shared_ptr nativeQueueMutex; }; diff --git a/Engine/Source/RHI-Vulkan/Src/Device.cpp b/Engine/Source/RHI-Vulkan/Src/Device.cpp index 2e2976019..cbc76e37e 100644 --- a/Engine/Source/RHI-Vulkan/Src/Device.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Device.cpp @@ -414,7 +414,7 @@ namespace RHI::Vulkan { if (queueMutex == nullptr) { queueMutex = std::make_shared(); } - tempQueues[i] = Common::MakeUnique(*this, queueType, queue, queueMutex); + tempQueues[i] = Common::MakeUnique(*this, queueType, queueFamilyIndex, queue, queueMutex); } queues[queueType] = std::move(tempQueues); diff --git a/Engine/Source/RHI-Vulkan/Src/Queue.cpp b/Engine/Source/RHI-Vulkan/Src/Queue.cpp index 77c783b9f..8f747bd66 100644 --- a/Engine/Source/RHI-Vulkan/Src/Queue.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Queue.cpp @@ -12,9 +12,10 @@ #include namespace RHI::Vulkan { - VulkanQueue::VulkanQueue(VulkanDevice& inDevice, const QueueType inType, const VkQueue inNativeQueue, std::shared_ptr inNativeQueueMutex) + VulkanQueue::VulkanQueue(VulkanDevice& inDevice, const QueueType inType, const uint32_t inFamilyIndex, const VkQueue inNativeQueue, std::shared_ptr inNativeQueueMutex) : Queue(inType) , device(inDevice) + , familyIndex(inFamilyIndex) , nativeQueue(inNativeQueue) , nativeQueueMutex(std::move(inNativeQueueMutex)) { @@ -83,6 +84,11 @@ namespace RHI::Vulkan { return properties.limits.timestampPeriod; } + uint32_t VulkanQueue::GetFamilyIndex() const + { + return familyIndex; + } + VkQueue VulkanQueue::GetNative() const { return nativeQueue; diff --git a/Engine/Source/RHI-Vulkan/Src/SwapChain.cpp b/Engine/Source/RHI-Vulkan/Src/SwapChain.cpp index e0d69209c..f3edb30ba 100644 --- a/Engine/Source/RHI-Vulkan/Src/SwapChain.cpp +++ b/Engine/Source/RHI-Vulkan/Src/SwapChain.cpp @@ -82,6 +82,10 @@ namespace RHI::Vulkan { Assert(vkSurface); const auto surface = vkSurface->GetNative(); + VkBool32 presentSupported = VK_FALSE; + Assert(vkGetPhysicalDeviceSurfaceSupportKHR(device.GetGpu().GetNative(), queue.GetFamilyIndex(), surface, &presentSupported) == VK_SUCCESS); + AssertWithReason(presentSupported == VK_TRUE, "the requested vulkan present queue does not support the swap chain surface"); + VkSurfaceCapabilitiesKHR surfaceCap; vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device.GetGpu().GetNative(), surface, &surfaceCap); From 36aad00ecb76be62f5a69fef806f10bbbaa25b66 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Tue, 18 Aug 2026 15:35:44 +0800 Subject: [PATCH 13/24] feat: add SwiftShader Conan recipe --- .../ConanRecipes/swiftshader/conandata.yml | 7 ++ .../ConanRecipes/swiftshader/conanfile.py | 101 ++++++++++++++++++ .../swiftshader/test_package/CMakeLists.txt | 9 ++ .../swiftshader/test_package/conanfile.py | 28 +++++ .../swiftshader/test_package/test_package.cpp | 44 ++++++++ 5 files changed, 189 insertions(+) create mode 100644 ThirdParty/ConanRecipes/swiftshader/conandata.yml create mode 100644 ThirdParty/ConanRecipes/swiftshader/conanfile.py create mode 100644 ThirdParty/ConanRecipes/swiftshader/test_package/CMakeLists.txt create mode 100644 ThirdParty/ConanRecipes/swiftshader/test_package/conanfile.py create mode 100644 ThirdParty/ConanRecipes/swiftshader/test_package/test_package.cpp diff --git a/ThirdParty/ConanRecipes/swiftshader/conandata.yml b/ThirdParty/ConanRecipes/swiftshader/conandata.yml new file mode 100644 index 000000000..2f0917424 --- /dev/null +++ b/ThirdParty/ConanRecipes/swiftshader/conandata.yml @@ -0,0 +1,7 @@ +platforms: + - Windows-x86_64 + - Macos-armv8 + - Linux-x86_64 +sources: + "2026.8.10-exp": + commit: "6b8d31709ad185dbd64e80865e830a9dbe8e7559" diff --git a/ThirdParty/ConanRecipes/swiftshader/conanfile.py b/ThirdParty/ConanRecipes/swiftshader/conanfile.py new file mode 100644 index 000000000..3a81832d3 --- /dev/null +++ b/ThirdParty/ConanRecipes/swiftshader/conanfile.py @@ -0,0 +1,101 @@ +import os + +from conan import ConanFile +from conan.errors import ConanException, ConanInvalidConfiguration +from conan.tools.build import can_run, check_min_cppstd +from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout +from conan.tools.files import copy +from conan.tools.scm import Git + +required_conan_version = ">=2.0.9" + + +class SwiftShaderConan(ConanFile): + name = "swiftshader" + description = "CPU-based Vulkan implementation" + license = "Apache-2.0" + url = "https://github.com/conan-io/conan-center-index" + homepage = "https://github.com/google/swiftshader" + topics = ("vulkan", "driver", "software-renderer") + package_type = "shared-library" + settings = "os", "arch", "compiler", "build_type" + + def layout(self): + cmake_layout(self, src_folder="src") + + def validate(self): + check_min_cppstd(self, 17) + supported_arches = { + "Windows": ("x86_64",), + "Macos": ("armv8", "x86_64"), + "Linux": ("x86_64", "armv8"), + } + if str(self.settings.os) not in supported_arches or str(self.settings.arch) not in supported_arches[str(self.settings.os)]: + raise ConanInvalidConfiguration(f"SwiftShader is not supported on {self.settings.os}/{self.settings.arch}") + + def build_requirements(self): + self.tool_requires("ninja/[>=1.12]") + self.tool_requires("cmake/[>=3.22.1]") + + def source(self): + git = Git(self) + commit = self.conan_data["sources"][self.version]["commit"] + git.run("init .") + git.run("remote add origin https://github.com/google/swiftshader.git") + git.run(f"fetch --depth 1 origin {commit}") + git.run("checkout --detach FETCH_HEAD") + + def generate(self): + toolchain = CMakeToolchain(self, generator="Ninja") + toolchain.cache_variables["SWIFTSHADER_BUILD_TESTS"] = False + toolchain.cache_variables["SWIFTSHADER_BUILD_BENCHMARKS"] = False + toolchain.cache_variables["SWIFTSHADER_BUILD_PVR"] = False + toolchain.cache_variables["SWIFTSHADER_WARNINGS_AS_ERRORS"] = False + if self.settings.os == "Linux": + toolchain.cache_variables["SWIFTSHADER_BUILD_WSI_XCB"] = False + toolchain.cache_variables["SWIFTSHADER_BUILD_WSI_WAYLAND"] = False + toolchain.generate() + + deps = CMakeDeps(self) + deps.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build(target="vk_swiftshader") + + def package(self): + copy(self, "LICENSE.txt", self.source_folder, os.path.join(self.package_folder, "licenses")) + + cmake_system_names = {"Macos": "Darwin", "Windows": "Windows", "Linux": "Linux"} + output_folder = os.path.join(self.build_folder, cmake_system_names[str(self.settings.os)]) + runtime_folder = os.path.join(self.package_folder, "bin" if self.settings.os == "Windows" else "lib") + copy(self, "vk_swiftshader_icd.json", output_folder, runtime_folder) + if self.settings.os == "Windows": + copy(self, "vk_swiftshader.dll", output_folder, runtime_folder) + copy(self, "vk_swiftshader.pdb", output_folder, runtime_folder) + library_name = "vk_swiftshader.dll" + elif self.settings.os == "Macos": + copy(self, "libvk_swiftshader.dylib", output_folder, runtime_folder) + library_name = "libvk_swiftshader.dylib" + else: + copy(self, "libvk_swiftshader.so", output_folder, runtime_folder) + library_name = "libvk_swiftshader.so" + + for required_file in ("vk_swiftshader_icd.json", library_name): + if not os.path.isfile(os.path.join(runtime_folder, required_file)): + raise ConanException(f"Required SwiftShader runtime file was not packaged: {required_file}") + + def package_info(self): + runtime_dir = "bin" if self.settings.os == "Windows" else "lib" + manifest = os.path.join(self.package_folder, runtime_dir, "vk_swiftshader_icd.json") + self.runenv_info.define_path("VK_DRIVER_FILES", manifest) + self.cpp_info.bindirs = ["bin"] if self.settings.os == "Windows" else [] + self.cpp_info.includedirs = [] + self.cpp_info.libdirs = [] + self.cpp_info.libs = [] + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package") + self.run(bin_path, env="conanrun") diff --git a/ThirdParty/ConanRecipes/swiftshader/test_package/CMakeLists.txt b/ThirdParty/ConanRecipes/swiftshader/test_package/CMakeLists.txt new file mode 100644 index 000000000..1cf5020da --- /dev/null +++ b/ThirdParty/ConanRecipes/swiftshader/test_package/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.15) +project(test_package LANGUAGES CXX) + +find_package(VulkanHeaders REQUIRED CONFIG) +find_package(VulkanLoader REQUIRED CONFIG) + +add_executable(${PROJECT_NAME} test_package.cpp) +target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_17) +target_link_libraries(${PROJECT_NAME} PRIVATE Vulkan::Headers Vulkan::Loader) diff --git a/ThirdParty/ConanRecipes/swiftshader/test_package/conanfile.py b/ThirdParty/ConanRecipes/swiftshader/test_package/conanfile.py new file mode 100644 index 000000000..6a31236da --- /dev/null +++ b/ThirdParty/ConanRecipes/swiftshader/test_package/conanfile.py @@ -0,0 +1,28 @@ +import os + +from conan import ConanFile +from conan.tools.build import can_run +from conan.tools.cmake import CMake, cmake_layout + + +class TestPackageConan(ConanFile): + settings = "os", "arch", "compiler", "build_type" + generators = "CMakeDeps", "CMakeToolchain" + + def layout(self): + cmake_layout(self) + + def requirements(self): + self.requires(self.tested_reference_str) + self.requires("vulkan-headers/1.4.350.0") + self.requires("vulkan-loader/1.4.350.0") + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def test(self): + if can_run(self): + bin_path = os.path.join(self.cpp.build.bindir, "test_package") + self.run(bin_path, env="conanrun") diff --git a/ThirdParty/ConanRecipes/swiftshader/test_package/test_package.cpp b/ThirdParty/ConanRecipes/swiftshader/test_package/test_package.cpp new file mode 100644 index 000000000..d52ef113c --- /dev/null +++ b/ThirdParty/ConanRecipes/swiftshader/test_package/test_package.cpp @@ -0,0 +1,44 @@ +#include + +#include +#include + +int main() { + VkApplicationInfo applicationInfo = {}; + applicationInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; + applicationInfo.pApplicationName = "SwiftShader Conan test package"; + applicationInfo.apiVersion = VK_API_VERSION_1_0; + + VkInstanceCreateInfo instanceCreateInfo = {}; + instanceCreateInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; + instanceCreateInfo.pApplicationInfo = &applicationInfo; + + VkInstance instance = VK_NULL_HANDLE; + VkResult result = vkCreateInstance(&instanceCreateInfo, nullptr, &instance); + if (result != VK_SUCCESS) { + std::cerr << "vkCreateInstance failed with VkResult " << result << std::endl; + return 1; + } + + uint32_t physicalDeviceCount = 0; + result = vkEnumeratePhysicalDevices(instance, &physicalDeviceCount, nullptr); + if (result != VK_SUCCESS || physicalDeviceCount == 0) { + std::cerr << "SwiftShader exposed no Vulkan physical devices" << std::endl; + vkDestroyInstance(instance, nullptr); + return 1; + } + + std::vector physicalDevices(physicalDeviceCount); + result = vkEnumeratePhysicalDevices(instance, &physicalDeviceCount, physicalDevices.data()); + if (result != VK_SUCCESS) { + std::cerr << "vkEnumeratePhysicalDevices failed with VkResult " << result << std::endl; + vkDestroyInstance(instance, nullptr); + return 1; + } + + VkPhysicalDeviceProperties properties = {}; + vkGetPhysicalDeviceProperties(physicalDevices[0], &properties); + std::cout << "Loaded Vulkan device: " << properties.deviceName << std::endl; + vkDestroyInstance(instance, nullptr); + return 0; +} From 625baac0052b6b3624493ccd8fc122727ea725ed Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Tue, 18 Aug 2026 16:23:23 +0800 Subject: [PATCH 14/24] feat: support software GPU selection --- Editor/Include/Editor/EditorApplication.h | 1 + Editor/Include/Editor/Frame/ProjectHubFrame.h | 10 +++--- Editor/Src/EditorApplication.cpp | 2 +- Editor/Src/Frame/ProjectHubFrame.cpp | 31 ++++++++++--------- Editor/Src/Main.cpp | 6 ++++ Engine/Source/Launch/Src/GameApplication.cpp | 5 +++ Engine/Source/RHI-DirectX12/Src/Gpu.cpp | 5 +++ Engine/Source/RHI-DirectX12/Src/Instance.cpp | 15 ++++++++- Engine/Source/RHI-Dummy/Src/Gpu.cpp | 5 ++- Engine/Source/RHI-Vulkan/CMakeLists.txt | 2 +- .../RHI-Vulkan/Include/RHI/Vulkan/Common.h | 2 +- Engine/Source/RHI-Vulkan/Src/Device.cpp | 18 +++++++++-- Engine/Source/RHI-Vulkan/Src/Gpu.cpp | 13 ++++++++ Engine/Source/RHI-Vulkan/Src/Instance.cpp | 7 ++++- Engine/Source/RHI/Include/RHI/Gpu.h | 6 ++++ Engine/Source/RHI/Include/RHI/Instance.h | 2 ++ Engine/Source/RHI/Src/Instance.cpp | 4 ++- .../Source/Render/SharedSrc/RenderModule.cpp | 4 ++- .../Source/Runtime/Include/Runtime/Engine.h | 5 ++- Engine/Source/Runtime/Src/Engine.cpp | 16 ++++++++-- Sample/Base/Application.cpp | 18 ++++++++++- Sample/Base/Application.h | 2 ++ Sample/Rendering-BaseTexture/BaseTexture.cpp | 3 +- Sample/Rendering-SSAO/SSAOApplication.cpp | 3 +- Sample/Rendering-Triangle/Triangle.cpp | 3 +- ThirdParty/Registry.cmake | 11 +++++++ conanfile.py | 1 + 27 files changed, 159 insertions(+), 41 deletions(-) diff --git a/Editor/Include/Editor/EditorApplication.h b/Editor/Include/Editor/EditorApplication.h index 69e4c5edc..947acc765 100644 --- a/Editor/Include/Editor/EditorApplication.h +++ b/Editor/Include/Editor/EditorApplication.h @@ -21,6 +21,7 @@ namespace Editor { EditorApplicationMode mode; std::string rhiType; bool gpuDebug; + bool softwareGpu; std::string projectRoot; }; diff --git a/Editor/Include/Editor/Frame/ProjectHubFrame.h b/Editor/Include/Editor/Frame/ProjectHubFrame.h index 07744a861..71f24b60e 100644 --- a/Editor/Include/Editor/Frame/ProjectHubFrame.h +++ b/Editor/Include/Editor/Frame/ProjectHubFrame.h @@ -40,14 +40,14 @@ namespace Editor { ProjectHubFrame(); ~ProjectHubFrame(); - void Render(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug); + void Render(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu); private: - void RenderActionBar(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug); - void RenderRecentProjects(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug); - void RenderCreateProjectPopup(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug); + void RenderActionBar(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu); + void RenderRecentProjects(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu); + void RenderCreateProjectPopup(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu); CreateProjectResult CreateProject(); - void OpenProject(EditorWindow& inWindow, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug); + void OpenProject(EditorWindow& inWindow, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu); void SaveRecentProjects() const; void TouchRecentProject(const std::string& inProjectPath); diff --git a/Editor/Src/EditorApplication.cpp b/Editor/Src/EditorApplication.cpp index 20308537d..6a30eef67 100644 --- a/Editor/Src/EditorApplication.cpp +++ b/Editor/Src/EditorApplication.cpp @@ -329,7 +329,7 @@ namespace Editor { void EditorApplication::RenderProjectHubFrame() { - projectHubFrame->Render(*window, desc.rhiType, desc.gpuDebug); + projectHubFrame->Render(*window, desc.rhiType, desc.gpuDebug, desc.softwareGpu); ImGui::Render(); Runtime::EngineHolder::Get().Tick(ImGui::GetIO().DeltaTime); window->RenderUiOnly(*ImGui::GetDrawData()); diff --git a/Editor/Src/Frame/ProjectHubFrame.cpp b/Editor/Src/Frame/ProjectHubFrame.cpp index 39012c629..05de85b8a 100644 --- a/Editor/Src/Frame/ProjectHubFrame.cpp +++ b/Editor/Src/Frame/ProjectHubFrame.cpp @@ -89,13 +89,14 @@ namespace Editor::ProjectHub::Internal { return result; } - static std::string LaunchCommand(const std::string& inExecutable, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug) + static std::string LaunchCommand(const std::string& inExecutable, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const std::string gpuDebugArg = inGpuDebug ? " -gpuDebug" : ""; + const std::string softwareGpuArg = inSoftwareGpu ? " -softwareGpu" : ""; #if PLATFORM_WINDOWS - return std::format("start \"\" \"{}\" -project \"{}\" -rhi {}{}", inExecutable, inProjectPath, inRhiType, gpuDebugArg); + return std::format("start \"\" \"{}\" -project \"{}\" -rhi {}{}{}", inExecutable, inProjectPath, inRhiType, gpuDebugArg, softwareGpuArg); #else - return std::format("\"{}\" -project \"{}\" -rhi {}{} &", inExecutable, inProjectPath, inRhiType, gpuDebugArg); + return std::format("\"{}\" -project \"{}\" -rhi {}{}{} &", inExecutable, inProjectPath, inRhiType, gpuDebugArg, softwareGpuArg); #endif } } @@ -126,7 +127,7 @@ namespace Editor { SaveRecentProjects(); } - void ProjectHubFrame::Render(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug) + void ProjectHubFrame::Render(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const ImGuiViewport* viewport = ImGui::GetMainViewport(); ImGui::SetNextWindowPos(viewport->WorkPos); @@ -143,21 +144,21 @@ namespace Editor { | ImGuiWindowFlags_NoBringToFrontOnFocus); ImGui::PopStyleVar(2); - RenderActionBar(inWindow, inRhiType, inGpuDebug); + RenderActionBar(inWindow, inRhiType, inGpuDebug, inSoftwareGpu); ImGui::Dummy(ImVec2(0.0f, 22.0f)); - RenderRecentProjects(inWindow, inRhiType, inGpuDebug); - RenderCreateProjectPopup(inWindow, inRhiType, inGpuDebug); + RenderRecentProjects(inWindow, inRhiType, inGpuDebug, inSoftwareGpu); + RenderCreateProjectPopup(inWindow, inRhiType, inGpuDebug, inSoftwareGpu); ImGui::End(); } - void ProjectHubFrame::RenderActionBar(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug) + void ProjectHubFrame::RenderActionBar(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const float spacing = ImGui::GetStyle().ItemSpacing.x; const float buttonWidth = (ImGui::GetContentRegionAvail().x - spacing) * 0.5f; const std::string openLabel = Widgets::Label(Icons::Tabler::folderOpen, "Open"); if (Widgets::PrimaryButton(openLabel.c_str(), ImVec2(buttonWidth, ProjectHub::Internal::actionButtonHeight))) { if (const auto selectedDirectory = PlatformUtils::SelectDirectory("Open Explosion Project")) { - OpenProject(inWindow, *selectedDirectory, inRhiType, inGpuDebug); + OpenProject(inWindow, *selectedDirectory, inRhiType, inGpuDebug, inSoftwareGpu); } } @@ -169,7 +170,7 @@ namespace Editor { } } - void ProjectHubFrame::RenderRecentProjects(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug) + void ProjectHubFrame::RenderRecentProjects(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const std::string recentProjectsLabel = Widgets::Label(Icons::Tabler::folder, "Recent projects"); ImGui::TextUnformatted(recentProjectsLabel.c_str()); @@ -209,11 +210,11 @@ namespace Editor { ImGui::EndChild(); if (!projectToOpen.empty()) { - OpenProject(inWindow, projectToOpen, inRhiType, inGpuDebug); + OpenProject(inWindow, projectToOpen, inRhiType, inGpuDebug, inSoftwareGpu); } } - void ProjectHubFrame::RenderCreateProjectPopup(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug) + void ProjectHubFrame::RenderCreateProjectPopup(EditorWindow& inWindow, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const ImGuiViewport* viewport = ImGui::GetMainViewport(); ImGui::SetNextWindowPos(viewport->GetCenter(), ImGuiCond_Appearing, ImVec2(0.5f, 0.5f)); @@ -288,7 +289,7 @@ namespace Editor { if (result.success) { statusMessage.clear(); ImGui::CloseCurrentPopup(); - OpenProject(inWindow, result.projectPath, inRhiType, inGpuDebug); + OpenProject(inWindow, result.projectPath, inRhiType, inGpuDebug, inSoftwareGpu); } else { statusMessage = result.error; } @@ -327,7 +328,7 @@ namespace Editor { return { .success = true, .error = {}, .projectPath = projectDir.String() }; } - void ProjectHubFrame::OpenProject(EditorWindow& inWindow, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug) + void ProjectHubFrame::OpenProject(EditorWindow& inWindow, const std::string& inProjectPath, const std::string& inRhiType, bool inGpuDebug, bool inSoftwareGpu) { const Common::Path projectDir(inProjectPath); if (!projectDir.Exists() || !projectDir.IsDirectory()) { @@ -338,7 +339,7 @@ namespace Editor { TouchRecentProject(inProjectPath); SaveRecentProjects(); - const std::string command = ProjectHub::Internal::LaunchCommand(Core::Paths::ExecutablePath().String(), inProjectPath, inRhiType, inGpuDebug); + const std::string command = ProjectHub::Internal::LaunchCommand(Core::Paths::ExecutablePath().String(), inProjectPath, inRhiType, inGpuDebug, inSoftwareGpu); std::ignore = std::system(command.c_str()); inWindow.RequestClose(); } diff --git a/Editor/Src/Main.cpp b/Editor/Src/Main.cpp index 93feab1d8..10e492669 100644 --- a/Editor/Src/Main.cpp +++ b/Editor/Src/Main.cpp @@ -19,6 +19,10 @@ static Core::CmdlineArgValue caGpuDebug( "gpuDebug", "-gpuDebug", false, "enable GPU validation layers"); +static Core::CmdlineArgValue caSoftwareGpu( + "softwareGpu", "-softwareGpu", false, + "prefer a software GPU, falling back to hardware when unavailable"); + static Editor::EditorApplicationMode GetAppMode() { return caProjectRoot.GetValue().empty() @@ -35,6 +39,7 @@ static void InitializeEngine() params.gameRoot = caProjectRoot.GetValue(); params.rhiType = caRhiType.GetValue(); params.gpuDebug = caGpuDebug.GetValue(); + params.useSoftwareGpu = caSoftwareGpu.GetValue(); Runtime::EngineHolder::Load("Editor", params); } @@ -47,6 +52,7 @@ int main(int argc, char* argv[]) .mode = GetAppMode(), .rhiType = caRhiType.GetValue(), .gpuDebug = caGpuDebug.GetValue(), + .softwareGpu = caSoftwareGpu.GetValue(), .projectRoot = caProjectRoot.GetValue() }; int result = 0; diff --git a/Engine/Source/Launch/Src/GameApplication.cpp b/Engine/Source/Launch/Src/GameApplication.cpp index dcb8e6ac4..4aca50897 100644 --- a/Engine/Source/Launch/Src/GameApplication.cpp +++ b/Engine/Source/Launch/Src/GameApplication.cpp @@ -17,6 +17,10 @@ namespace Launch { "rhiType", "-rhi", RHI::GetPlatformDefaultRHIAbbrString(), "rhi abbr string, can be 'dx12' or 'vulkan'"); + static Core::CmdlineArgValue caSoftwareGpu( + "softwareGpu", "-softwareGpu", false, + "prefer a software GPU, falling back to hardware when unavailable"); + GameApplication::GameApplication(int argc, char* argv[]) : lastFrameTimeSeconds(Common::TimePoint::Now().ToSeconds()) , thisFrameTimeSeconds(Common::TimePoint::Now().ToSeconds()) @@ -28,6 +32,7 @@ namespace Launch { engineInitParams.logToFile = true; engineInitParams.gpuDebug = false; engineInitParams.rhiType = caRhiType.GetValue(); + engineInitParams.useSoftwareGpu = caSoftwareGpu.GetValue(); Runtime::EngineHolder::Load(gameModuleName, engineInitParams); engine = &Runtime::EngineHolder::Get(); diff --git a/Engine/Source/RHI-DirectX12/Src/Gpu.cpp b/Engine/Source/RHI-DirectX12/Src/Gpu.cpp index 871bfc98c..ab3c206b4 100644 --- a/Engine/Source/RHI-DirectX12/Src/Gpu.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Gpu.cpp @@ -6,6 +6,8 @@ #include #include +#include + namespace RHI::DirectX12 { DX12Gpu::DX12Gpu(DX12Instance& inInstance, ComPtr&& inNativeAdapter) : instance(inInstance) @@ -21,8 +23,11 @@ namespace RHI::DirectX12 { Assert(SUCCEEDED(nativeAdapter->GetDesc1(&desc))); GpuProperty property {}; + property.name = Common::StringUtils::ToByteString(desc.Description); property.vendorId = desc.VendorId; property.deviceId = desc.DeviceId; + property.dedicatedVideoMemorySize = desc.DedicatedVideoMemory; + property.sharedSystemMemorySize = desc.SharedSystemMemory; property.type = desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE ? GpuType::software : GpuType::hardware; return property; } diff --git a/Engine/Source/RHI-DirectX12/Src/Instance.cpp b/Engine/Source/RHI-DirectX12/Src/Instance.cpp index 5af8a1316..b41c34681 100644 --- a/Engine/Source/RHI-DirectX12/Src/Instance.cpp +++ b/Engine/Source/RHI-DirectX12/Src/Instance.cpp @@ -110,9 +110,22 @@ namespace RHI::DirectX12 { void DX12Instance::EnumerateAdapters() { + if (GetCreateInfo().useSoftwareGpu) { + ComPtr nativeWarpAdapter; + Assert(SUCCEEDED(nativeFactory->EnumWarpAdapter(IID_PPV_ARGS(&nativeWarpAdapter)))); + ComPtr nativeWarpAdapter1; + Assert(SUCCEEDED(nativeWarpAdapter.As(&nativeWarpAdapter1))); + gpus.emplace_back(Common::MakeUnique(*this, std::move(nativeWarpAdapter1))); + return; + } + ComPtr tempAdapter; for (uint32_t i = 0; SUCCEEDED(nativeFactory->EnumAdapters1(i, &tempAdapter)); i++) { - gpus.emplace_back(Common::MakeUnique(*this, std::move(tempAdapter))); + DXGI_ADAPTER_DESC1 desc; + Assert(SUCCEEDED(tempAdapter->GetDesc1(&desc))); + if ((desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) == 0) { + gpus.emplace_back(Common::MakeUnique(*this, std::move(tempAdapter))); + } tempAdapter = nullptr; } } diff --git a/Engine/Source/RHI-Dummy/Src/Gpu.cpp b/Engine/Source/RHI-Dummy/Src/Gpu.cpp index d02abc004..c154bc0e0 100644 --- a/Engine/Source/RHI-Dummy/Src/Gpu.cpp +++ b/Engine/Source/RHI-Dummy/Src/Gpu.cpp @@ -15,7 +15,10 @@ namespace RHI::Dummy { GpuProperty DummyGpu::GetProperty() { - return {}; + GpuProperty result {}; + result.name = "Dummy GPU"; + result.type = GpuType::software; + return result; } FeatureFlags DummyGpu::GetFeatures() diff --git a/Engine/Source/RHI-Vulkan/CMakeLists.txt b/Engine/Source/RHI-Vulkan/CMakeLists.txt index b872d14cf..b350e418b 100644 --- a/Engine/Source/RHI-Vulkan/CMakeLists.txt +++ b/Engine/Source/RHI-Vulkan/CMakeLists.txt @@ -12,7 +12,7 @@ exp_add_library( TYPE SHARED SRC ${sources} ${platform_sources} PUBLIC_INC Include - PUBLIC_LIB RHI ${platform_ext_libs} Vulkan::Headers Vulkan::Loader vulkan-validationlayers::vulkan-validationlayers spirv-cross::spirv-cross GPUOpen::VulkanMemoryAllocator + PUBLIC_LIB RHI ${platform_ext_libs} swiftshader::swiftshader Vulkan::Headers Vulkan::Loader vulkan-validationlayers::vulkan-validationlayers spirv-cross::spirv-cross GPUOpen::VulkanMemoryAllocator ) # .mm files can not perform unity build with .cpp files diff --git a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h index 210cbbcad..4c6254842 100644 --- a/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h +++ b/Engine/Source/RHI-Vulkan/Include/RHI/Vulkan/Common.h @@ -18,7 +18,7 @@ namespace RHI::Vulkan { ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_OTHER, GpuType::software) ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU, GpuType::hardware) ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU, GpuType::hardware) - ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, GpuType::software) + ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, GpuType::hardware) ECIMPL_ITEM(VK_PHYSICAL_DEVICE_TYPE_CPU, GpuType::software) ECIMPL_END(GpuType) diff --git a/Engine/Source/RHI-Vulkan/Src/Device.cpp b/Engine/Source/RHI-Vulkan/Src/Device.cpp index cbc76e37e..e8fcab095 100644 --- a/Engine/Source/RHI-Vulkan/Src/Device.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Device.cpp @@ -36,7 +36,6 @@ namespace RHI::Vulkan { "VK_KHR_depth_stencil_resolve", "VK_KHR_create_renderpass2", #if PLATFORM_MACOS - "VK_KHR_portability_subset", "VK_EXT_extended_dynamic_state" #endif }; @@ -386,8 +385,21 @@ namespace RHI::Vulkan { extendedDynamicStateFeatures.extendedDynamicState = VK_TRUE; dynamicRenderingFeatures.pNext = &extendedDynamicStateFeatures; - deviceCreateInfo.ppEnabledExtensionNames = requiredExtensions.data(); - deviceCreateInfo.enabledExtensionCount = static_cast(requiredExtensions.size()); + std::vector enabledExtensions = requiredExtensions; +#if PLATFORM_MACOS + constexpr std::string_view portabilitySubsetExtensionName = "VK_KHR_portability_subset"; + uint32_t extensionCount = 0; + vkEnumerateDeviceExtensionProperties(gpu.GetNative(), nullptr, &extensionCount, nullptr); + std::vector extensions(extensionCount); + vkEnumerateDeviceExtensionProperties(gpu.GetNative(), nullptr, &extensionCount, extensions.data()); + if (std::ranges::find_if(extensions, [portabilitySubsetExtensionName](const VkExtensionProperties& inExtension) -> bool { + return std::string_view(inExtension.extensionName) == portabilitySubsetExtensionName; + }) != extensions.end()) { + enabledExtensions.emplace_back(portabilitySubsetExtensionName.data()); + } +#endif + deviceCreateInfo.ppEnabledExtensionNames = enabledExtensions.data(); + deviceCreateInfo.enabledExtensionCount = static_cast(enabledExtensions.size()); Assert(vkCreateDevice(gpu.GetNative(), &deviceCreateInfo, nullptr, &nativeDevice) == VK_SUCCESS); } diff --git a/Engine/Source/RHI-Vulkan/Src/Gpu.cpp b/Engine/Source/RHI-Vulkan/Src/Gpu.cpp index a330dffe2..167988939 100644 --- a/Engine/Source/RHI-Vulkan/Src/Gpu.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Gpu.cpp @@ -23,9 +23,22 @@ namespace RHI::Vulkan { vkGetPhysicalDeviceProperties(nativePhysicalDevice, &vkPhysicalDeviceProperties); GpuProperty property {}; + property.name = vkPhysicalDeviceProperties.deviceName; property.vendorId = vkPhysicalDeviceProperties.vendorID; property.deviceId = vkPhysicalDeviceProperties.deviceID; + property.driverVersion = vkPhysicalDeviceProperties.driverVersion; + property.apiVersion = vkPhysicalDeviceProperties.apiVersion; property.type = EnumCast(vkPhysicalDeviceProperties.deviceType); + + VkPhysicalDeviceMemoryProperties memoryProperties; + vkGetPhysicalDeviceMemoryProperties(nativePhysicalDevice, &memoryProperties); + for (uint32_t i = 0; i < memoryProperties.memoryHeapCount; i++) { + if ((memoryProperties.memoryHeaps[i].flags & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) != 0) { + property.dedicatedVideoMemorySize += memoryProperties.memoryHeaps[i].size; + } else { + property.sharedSystemMemorySize += memoryProperties.memoryHeaps[i].size; + } + } return property; } diff --git a/Engine/Source/RHI-Vulkan/Src/Instance.cpp b/Engine/Source/RHI-Vulkan/Src/Instance.cpp index 361b7dac6..b5b3f4d67 100644 --- a/Engine/Source/RHI-Vulkan/Src/Instance.cpp +++ b/Engine/Source/RHI-Vulkan/Src/Instance.cpp @@ -80,8 +80,13 @@ namespace RHI::Vulkan { #endif , nativeInstance(VK_NULL_HANDLE) { + if (GetCreateInfo().useSoftwareGpu) { + Common::PlatformUtils::SetEnvVar("VK_DRIVER_FILES", Internal::GetRuntimeManifestPath("vk_swiftshader_icd.json")); + } #if PLATFORM_MACOS - Common::PlatformUtils::SetEnvVar("VK_DRIVER_FILES", Internal::GetRuntimeManifestPath("MoltenVK_icd.json")); + else { + Common::PlatformUtils::SetEnvVar("VK_DRIVER_FILES", Internal::GetRuntimeManifestPath("MoltenVK_icd.json")); + } #endif #if BUILD_CONFIG_DEBUG diff --git a/Engine/Source/RHI/Include/RHI/Gpu.h b/Engine/Source/RHI/Include/RHI/Gpu.h index 981e86550..6ce5229aa 100644 --- a/Engine/Source/RHI/Include/RHI/Gpu.h +++ b/Engine/Source/RHI/Include/RHI/Gpu.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include @@ -15,8 +16,13 @@ namespace RHI { struct DeviceCreateInfo; struct GpuProperty { + std::string name; uint32_t vendorId; uint32_t deviceId; + uint32_t driverVersion; + uint32_t apiVersion; + uint64_t dedicatedVideoMemorySize; + uint64_t sharedSystemMemorySize; GpuType type; }; diff --git a/Engine/Source/RHI/Include/RHI/Instance.h b/Engine/Source/RHI/Include/RHI/Instance.h index 68a90387a..4f540f90f 100644 --- a/Engine/Source/RHI/Include/RHI/Instance.h +++ b/Engine/Source/RHI/Include/RHI/Instance.h @@ -16,6 +16,8 @@ namespace RHI { struct InstanceCreateInfo { InstanceCreateInfo(); + bool useSoftwareGpu; + #if BUILD_CONFIG_DEBUG bool gpuDebug; #endif diff --git a/Engine/Source/RHI/Src/Instance.cpp b/Engine/Source/RHI/Src/Instance.cpp index 4f4a73656..536236d5e 100644 --- a/Engine/Source/RHI/Src/Instance.cpp +++ b/Engine/Source/RHI/Src/Instance.cpp @@ -7,8 +7,9 @@ namespace RHI { InstanceCreateInfo::InstanceCreateInfo() + : useSoftwareGpu(false) #if BUILD_CONFIG_DEBUG - : gpuDebug(false) + , gpuDebug(false) #endif { } @@ -76,6 +77,7 @@ namespace RHI { if (instance == nullptr) { instance = module->CreateRHIInstance(inCreateInfo); } else { + Assert(instance->GetCreateInfo().useSoftwareGpu == inCreateInfo.useSoftwareGpu); #if BUILD_CONFIG_DEBUG Assert(instance->GetCreateInfo().gpuDebug == inCreateInfo.gpuDebug); #endif diff --git a/Engine/Source/Render/SharedSrc/RenderModule.cpp b/Engine/Source/Render/SharedSrc/RenderModule.cpp index 26452f021..47f8833c9 100644 --- a/Engine/Source/Render/SharedSrc/RenderModule.cpp +++ b/Engine/Source/Render/SharedSrc/RenderModule.cpp @@ -40,7 +40,9 @@ namespace Render { RenderWorkerThreads::Get().Start(); rhiInstance = RHI::Instance::GetByType(inParams.rhiType, inParams.instanceCreateInfo); - rhiDevice = rhiInstance->GetGpu(0)->RequestDevice( + AssertWithReason(rhiInstance->GetGpuNum() > 0, "no compatible GPU was found"); + RHI::Gpu* gpu = rhiInstance->GetGpu(0); + rhiDevice = gpu->RequestDevice( RHI::DeviceCreateInfo() .AddQueueRequest(RHI::QueueRequestInfo(RHI::QueueType::graphics, 1)) .AddQueueRequest(RHI::QueueRequestInfo(RHI::QueueType::compute, 1)) diff --git a/Engine/Source/Runtime/Include/Runtime/Engine.h b/Engine/Source/Runtime/Include/Runtime/Engine.h index afbeef020..e8db70bd3 100644 --- a/Engine/Source/Runtime/Include/Runtime/Engine.h +++ b/Engine/Source/Runtime/Include/Runtime/Engine.h @@ -15,10 +15,13 @@ namespace Runtime { class World; struct EngineInitParams { + EngineInitParams(); + bool logToFile; bool gpuDebug; std::string gameRoot; std::string rhiType; + bool useSoftwareGpu; }; class RUNTIME_API Engine { // NOLINT @@ -36,7 +39,7 @@ namespace Runtime { explicit Engine(const EngineInitParams& inParams); void AttachLogFile() const; - void InitRender(const std::string& inRhiTypeStr, bool inGpuDebug); + void InitRender(const std::string& inRhiTypeStr, bool inGpuDebug, bool inUseSoftwareGpu); void LoadPlugins() const; void LoadConfigs() const; diff --git a/Engine/Source/Runtime/Src/Engine.cpp b/Engine/Source/Runtime/Src/Engine.cpp index 3610fe035..ef6a51da3 100644 --- a/Engine/Source/Runtime/Src/Engine.cpp +++ b/Engine/Source/Runtime/Src/Engine.cpp @@ -16,6 +16,15 @@ #include namespace Runtime { + EngineInitParams::EngineInitParams() + : logToFile(false) + , gpuDebug(false) + , gameRoot() + , rhiType(RHI::GetPlatformDefaultRHIAbbrString()) + , useSoftwareGpu(false) + { + } + Engine::Engine(const EngineInitParams& inParams) { Core::ThreadContext::SetTag(Core::ThreadTag::game); @@ -28,7 +37,7 @@ namespace Runtime { if (inParams.logToFile) { AttachLogFile(); } - InitRender(inParams.rhiType, inParams.gpuDebug); + InitRender(inParams.rhiType, inParams.gpuDebug, inParams.useSoftwareGpu); LoadPlugins(); LoadConfigs(); } @@ -94,18 +103,21 @@ namespace Runtime { LogInfo(Core, "logger attached to file {}", logFile); } - void Engine::InitRender(const std::string& inRhiTypeStr, bool inGpuDebug) + void Engine::InitRender(const std::string& inRhiTypeStr, bool inGpuDebug, const bool inUseSoftwareGpu) { renderModule = ::Core::ModuleManager::Get().FindOrLoadTyped("Render"); Assert(renderModule != nullptr); Render::RenderModuleInitParams initParams; initParams.rhiType = RHI::GetRHITypeByAbbrString(inRhiTypeStr); + initParams.instanceCreateInfo.useSoftwareGpu = inUseSoftwareGpu; #if BUILD_CONFIG_DEBUG initParams.instanceCreateInfo.gpuDebug = inGpuDebug; #endif renderModule->Initialize(initParams); LogInfo(Render, "RHI type: {}", inRhiTypeStr); + const auto gpuProperty = renderModule->GetDevice()->GetGpu().GetProperty(); + LogInfo(Render, "GPU: {} ({})", gpuProperty.name, gpuProperty.type == RHI::GpuType::software ? "software" : "hardware"); } void Engine::LoadPlugins() const // NOLINT diff --git a/Sample/Base/Application.cpp b/Sample/Base/Application.cpp index 94710cc47..f80e725b7 100644 --- a/Sample/Base/Application.cpp +++ b/Sample/Base/Application.cpp @@ -26,6 +26,7 @@ Application::Application(std::string n) , windowExtent(1024, 768) , rhiType(RHI::RHIType::vulkan) , instance(nullptr) + , gpu(nullptr) , headless(false) , outputPath() , mousePos(FVec2Consts::zero) @@ -47,6 +48,7 @@ bool Application::Initialize(int argc, char* argv[]) Core::Cli::Get().Parse(argc, argv); std::string rhiString; + bool softwareGpu = false; #if BUILD_CONFIG_DEBUG bool gpuDebug = false; #endif @@ -54,6 +56,7 @@ bool Application::Initialize(int argc, char* argv[]) clipp::option("-w").doc("window width, 1024 by default") & clipp::value("width", windowExtent.x), clipp::option("-h").doc("window height, 768 by default") & clipp::value("height", windowExtent.y), clipp::option("-headless", "--headless").set(headless).doc("render one frame without creating a window"), + clipp::option("-softwareGpu", "--software-gpu").set(softwareGpu).doc("use the software GPU driver"), clipp::option("-output", "--output").doc("headless output image path, including extension") & clipp::value("path", outputPath), #if BUILD_CONFIG_DEBUG clipp::option("-gpuDebug").set(gpuDebug).doc("enable GPU validation layers"), @@ -76,10 +79,18 @@ bool Application::Initialize(int argc, char* argv[]) rhiType = RHI::GetRHITypeByAbbrString(rhiString); RHI::InstanceCreateInfo instanceCreateInfo; + instanceCreateInfo.useSoftwareGpu = softwareGpu; #if BUILD_CONFIG_DEBUG instanceCreateInfo.gpuDebug = gpuDebug; #endif instance = RHI::Instance::GetByType(rhiType, instanceCreateInfo); + if (instance->GetGpuNum() == 0) { + std::cerr << "no compatible GPU was found" << std::endl; + return false; + } + gpu = instance->GetGpu(0); + const auto gpuProperty = gpu->GetProperty(); + std::cout << "Selected GPU: " << gpuProperty.name << " (" << (gpuProperty.type == RHI::GpuType::software ? "software" : "hardware") << ")" << std::endl; return true; } @@ -115,7 +126,7 @@ int Application::RunLoop() } if (headless) { - currentTimeSeconds = lastTimeSeconds; + currentTimeSeconds = 0.0; deltaTimeSeconds = 0.0f; OnDrawFrame(); } @@ -292,6 +303,11 @@ RHI::Instance* Application::GetRHIInstance() const return instance; } +RHI::Gpu* Application::GetGpu() const +{ + return gpu; +} + void Application::SetCamera(Camera* inCamera) { camera = inCamera; diff --git a/Sample/Base/Application.h b/Sample/Base/Application.h index 44993d7a1..71334edbb 100644 --- a/Sample/Base/Application.h +++ b/Sample/Base/Application.h @@ -63,6 +63,7 @@ class Application { const std::string& GetOutputPath() const; RHI::RHIType GetRHIType() const; RHI::Instance* GetRHIInstance() const; + RHI::Gpu* GetGpu() const; Camera& GetCamera() const; UniquePtr CreateRenderTarget(RHI::Device& device) const; ShaderCompileOutput CompileShader(const std::string& fileName, const std::string& entryPoint, RHI::ShaderStageBits shaderStage, std::vector includePaths = {}) const; @@ -73,6 +74,7 @@ class Application { UVec2 windowExtent; RHI::RHIType rhiType; RHI::Instance* instance; + RHI::Gpu* gpu; bool headless; std::string outputPath; UniquePtr camera; diff --git a/Sample/Rendering-BaseTexture/BaseTexture.cpp b/Sample/Rendering-BaseTexture/BaseTexture.cpp index 154a432f8..0dc5b29ec 100644 --- a/Sample/Rendering-BaseTexture/BaseTexture.cpp +++ b/Sample/Rendering-BaseTexture/BaseTexture.cpp @@ -201,8 +201,7 @@ void BaseTexApp::OnDestroy() void BaseTexApp::CreateDevice() { - device = GetRHIInstance() - ->GetGpu(0) + device = GetGpu() ->RequestDevice( DeviceCreateInfo() .AddQueueRequest(QueueRequestInfo(QueueType::graphics, 1))); diff --git a/Sample/Rendering-SSAO/SSAOApplication.cpp b/Sample/Rendering-SSAO/SSAOApplication.cpp index d229f2935..82d00d6a9 100644 --- a/Sample/Rendering-SSAO/SSAOApplication.cpp +++ b/Sample/Rendering-SSAO/SSAOApplication.cpp @@ -509,8 +509,7 @@ class SSAOApp final : public Application { void CreateDevice() { - device = GetRHIInstance() - ->GetGpu(0) + device = GetGpu() ->RequestDevice( DeviceCreateInfo() .AddQueueRequest(QueueRequestInfo(QueueType::graphics, 1))); diff --git a/Sample/Rendering-Triangle/Triangle.cpp b/Sample/Rendering-Triangle/Triangle.cpp index f9ecd5226..d5827350e 100644 --- a/Sample/Rendering-Triangle/Triangle.cpp +++ b/Sample/Rendering-Triangle/Triangle.cpp @@ -184,8 +184,7 @@ void TriangleApplication::OnDestroy() void TriangleApplication::CreateDevice() { - device = GetRHIInstance() - ->GetGpu(0) + device = GetGpu() ->RequestDevice( DeviceCreateInfo() .AddQueueRequest(QueueRequestInfo(QueueType::graphics, 1))); diff --git a/ThirdParty/Registry.cmake b/ThirdParty/Registry.cmake index 7f2bedcfd..36b9044c0 100644 --- a/ThirdParty/Registry.cmake +++ b/ThirdParty/Registry.cmake @@ -35,6 +35,13 @@ find_package(VulkanHeaders REQUIRED GLOBAL) find_package(VulkanLoader REQUIRED GLOBAL) find_package(vulkan-validationlayers REQUIRED GLOBAL) find_package(spirv-cross REQUIRED GLOBAL) +find_package(swiftshader REQUIRED GLOBAL) + +# SwiftShader is a runtime-only package, so Conan's generated targets file does not declare the target named by +# swiftshader_LIBRARIES. Recreate it to carry the runtime files through the existing deployment mechanism. +if (NOT TARGET swiftshader::swiftshader) + add_library(swiftshader::swiftshader INTERFACE IMPORTED GLOBAL) +endif () if (BUILD_BENCHMARK) find_package(EnTT REQUIRED GLOBAL) @@ -54,8 +61,12 @@ if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") set_target_properties(libclang::libclang PROPERTIES RUNTIME_DEP "${libclang_INCLUDE_DIR}/../bin/libclang.dll") set_target_properties(dxc::dxc PROPERTIES RUNTIME_DEP "${dxc_INCLUDE_DIR}/../bin/dxil.dll;${dxc_INCLUDE_DIR}/../bin/dxcompiler.dll") set_target_properties(vulkan-validationlayers::vulkan-validationlayers PROPERTIES RUNTIME_DEP "${vulkan-validationlayers_PACKAGE_FOLDER_RELEASE}/bin/VkLayer_khronos_validation.dll;${vulkan-validationlayers_PACKAGE_FOLDER_RELEASE}/bin/VkLayer_khronos_validation.json") + set_target_properties(swiftshader::swiftshader PROPERTIES RUNTIME_DEP "${swiftshader_PACKAGE_FOLDER_RELEASE}/bin/vk_swiftshader.dll;${swiftshader_PACKAGE_FOLDER_RELEASE}/bin/vk_swiftshader_icd.json") elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") find_package(MoltenVK REQUIRED GLOBAL) set_target_properties(vulkan-validationlayers::vulkan-validationlayers PROPERTIES RUNTIME_DEP "${vulkan-validationlayers_PACKAGE_FOLDER_RELEASE}/lib/libVkLayer_khronos_validation.dylib;${vulkan-validationlayers_PACKAGE_FOLDER_RELEASE}/res/vulkan/explicit_layer.d/VkLayer_khronos_validation.json") set_target_properties(molten-vk::molten-vk PROPERTIES RUNTIME_DEP "${MoltenVK_INCLUDE_DIR}/../lib/libMoltenVK.dylib;${MoltenVK_INCLUDE_DIR}/../lib/MoltenVK_icd.json") + set_target_properties(swiftshader::swiftshader PROPERTIES RUNTIME_DEP "${swiftshader_PACKAGE_FOLDER_RELEASE}/lib/libvk_swiftshader.dylib;${swiftshader_PACKAGE_FOLDER_RELEASE}/lib/vk_swiftshader_icd.json") +elseif (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set_target_properties(swiftshader::swiftshader PROPERTIES RUNTIME_DEP "${swiftshader_PACKAGE_FOLDER_RELEASE}/lib/libvk_swiftshader.so;${swiftshader_PACKAGE_FOLDER_RELEASE}/lib/vk_swiftshader_icd.json") endif () diff --git a/conanfile.py b/conanfile.py index 078dd7f0f..07f996195 100644 --- a/conanfile.py +++ b/conanfile.py @@ -34,5 +34,6 @@ def requirements(self): self.requires("assimp/6.0.2-exp") self.requires("clipp/1.2.3-exp") self.requires("dxc/1.8.2505.1-exp") + self.requires("swiftshader/2026.8.10-exp") if self.settings.os == "Macos": self.requires("molten-vk/1.4.1-exp") From e706e8dd7ad13be6f0a82559baac4723c4206fa2 Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Tue, 18 Aug 2026 17:03:39 +0800 Subject: [PATCH 15/24] test: add rendering image regression coverage --- .github/workflows/build.yml | 2 +- CMake/Target.cmake | 1 + Sample/CMakeLists.txt | 38 ++++++ .../Baseline/RenderingSample-BaseTexture.png | Bin 0 -> 67847 bytes Sample/Test/Baseline/RenderingSample-SSAO.png | Bin 0 -> 336443 bytes .../Baseline/RenderingSample-Triangle.png | Bin 0 -> 33022 bytes Sample/Test/RenderingSampleTest.cpp | 125 ++++++++++++++++++ ThirdParty/Registry.cmake | 1 + conanfile.py | 1 + 9 files changed, 167 insertions(+), 1 deletion(-) create mode 100644 Sample/Test/Baseline/RenderingSample-BaseTexture.png create mode 100644 Sample/Test/Baseline/RenderingSample-SSAO.png create mode 100644 Sample/Test/Baseline/RenderingSample-Triangle.png create mode 100644 Sample/Test/RenderingSampleTest.cpp diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a49e2baed..fa4eb7129 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,7 +86,7 @@ jobs: python ThirdParty/ConanRecipes/build_recipes.py --export-only - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -G=Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + run: cmake -B ${{github.workspace}}/build -G=Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCI=ON - name: Build run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -j ${{env.MAKE_THREAD_NUM}} diff --git a/CMake/Target.cmake b/CMake/Target.cmake index c8f01ba04..296fb2231 100644 --- a/CMake/Target.cmake +++ b/CMake/Target.cmake @@ -3,6 +3,7 @@ include(CMakePackageConfigHelpers) option(BUILD_TEST "Build unit tests" ON) option(BUILD_BENCHMARK "Build benchmarks" ON) +option(CI "Build for continuous integration" OFF) set(GENERATED_DIR ${CMAKE_BINARY_DIR}/Generated) set(GENERATED_API_HEADER_DIR ${GENERATED_DIR}/Api) diff --git a/Sample/CMakeLists.txt b/Sample/CMakeLists.txt index 46f6efbcc..05c485bc8 100644 --- a/Sample/CMakeLists.txt +++ b/Sample/CMakeLists.txt @@ -84,3 +84,41 @@ add_sample( MODEL Rendering-SSAO/Model/Voyager.gltf ) + +if (BUILD_TEST AND BUILD_SAMPLE) + exp_add_executable( + NAME RenderingSample.Test + FOLDER Test + SRC Test/RenderingSampleTest.cpp + LIB cimg::cimg stb::stb + DEP_TARGET RenderingSample-Triangle RenderingSample-BaseTexture RenderingSample-SSAO + PRIVATE_COMPILE_DEF cimg_display=0 CI=$ + NOT_INSTALL + ) + + function(exp_add_rendering_sample_test) + set(options "") + set(singleValueArgs SAMPLE BASELINE RHI) + set(multiValueArgs "") + cmake_parse_arguments(arg "${options}" "${singleValueArgs}" "${multiValueArgs}" ${ARGN}) + + set(test_name "${arg_SAMPLE}.${arg_RHI}.Test") + add_test( + NAME ${test_name} + COMMAND RenderingSample.Test + --sample $ + --rhi ${arg_RHI} + --baseline ${CMAKE_CURRENT_SOURCE_DIR}/Test/Baseline/${arg_BASELINE}.png + --output ${CMAKE_BINARY_DIR}/Test/Generated/RenderingSample/${arg_BASELINE}-${arg_RHI}.png + ) + set_tests_properties(${test_name} PROPERTIES WORKING_DIRECTORY $) + endfunction() + + set(rendering_sample_names RenderingSample-Triangle RenderingSample-BaseTexture RenderingSample-SSAO) + foreach(sample ${rendering_sample_names}) + exp_add_rendering_sample_test(SAMPLE ${sample} BASELINE ${sample} RHI vulkan) + if (WIN32) + exp_add_rendering_sample_test(SAMPLE ${sample} BASELINE ${sample} RHI dx12) + endif () + endforeach() +endif () diff --git a/Sample/Test/Baseline/RenderingSample-BaseTexture.png b/Sample/Test/Baseline/RenderingSample-BaseTexture.png new file mode 100644 index 0000000000000000000000000000000000000000..912105122414ae99ceca0ac0a1a8caac253d10f1 GIT binary patch literal 67847 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

BTjmwvE8 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
A^q+6DK-n}fi?I+!+K`7D9jyey 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≈0$^=OJ4n;7 z_>FSVZ&Yz%>ga!N+R7r(jt}eE!j_TNJir-|DloRC#yyD#1}+wYmop2ilWL4DEo+&> zV+1t+WsU#IbhI%Y;t5hwSVv!T^53u7er6nW9_;|;)~udks@~rH{>LR#>d8ct`yz9mMReQmup^EeZQ}EcVJHT!i|DCh91}zpDr8*PwUk$6*zcc-I$&Z6dA0!VnTG zuRzeH@Z#a@u*d$({!b*N@s-=QWpSQQE`%njKlnlRNJidi6QSTO)i|a7{tWHldf3v~ zTXjO+KPEaH>1OlY*}LQn`1RxCeWvBEE(r57p8^jrTRDA;BINlJX{WdC)~ojC{u^ir zqg2G^@F~eXZBk0$R%9VX!FQ;Vp#j0i8T!)-!RDcl4cjF{i^k^ZYV+TOs~CRbmOb8R zW+c%57rWVq+fGTxBa!2ik)Fi0n9*R)D8?5el^q6B+l`}JsZn2KRQY9)i2+iN042Xr z*LI_ga`7IC3wSxht`ULuHNOnL*wgndSlqWyjK)v5$N4rOJI63D_=Hp!MLXdm!P85m z-&;M`D3g5NmZ=mThJx9=@+aVI&x`7@15C{J|AlztXq&9Hnz7qQd4UQvcZEa6P9%dKlXL8DT4wZ&8Tvc!x3zy z8|WmhsYQ5{;1e!-NQVJmb8nznZ|={tS)r&)&Y7L%x?B{@xJCu9m9O@cy&Y?kaMW=U zdZIw|H4X9DctIWB2kCDY947ww9Ltcajz#6?2iUu%%v`2xB<=6Hd#sQ^w6rAn9S&%f z&2~`Hb)R_E`km~%Bi!0TE|*k=Bq#WOEu=z7rN~({#UE<;7KaY5rKC`{>i?IN;>EUKc4d*A=wtT zX@F~bs#~h$=Mv-RYOt!DK|rO4b4juGRMA z9oPt$ogBj?ZI22=WPJsk>2aDexm%2i+?WLXkNL#=t>(q4x705L&h462X^(&&x zh&hU@^pT4Ti>R$B-Pk4xg$iFC?z_{{V0s4hNIwJ`eo5sItYd?xQ&%jDD!HhUho;B9 zRmWa>EHuPbu%|rmH{S@Oi*)bPZ!7@v_9R?uUyU1%$@7>lsr%f=zPEqf8T0UzC-s<8w~gfT zt0B=b8`i4l!=S%R%WNwnef|gCa@mG#|AblL;01p^<0;Ioo~%bbVy;+nw6m#BZv!l& zyh{&v6=Nv0(aB0MpQXH+*wXg<=1V+W50s1aVr-p*W=!E*r+4FU2qj;uL8$L>%y`6q zu!4q%;7@Hr-V@#VuL+x|EP6W8*^lmd2(O3oogO8KPUSr2&D*mEOJ*~z=Q>K&!t&Oh zKnK11Dk|t(D+5A&=SM#mxJoQyCrJ`a;1u2-I6luVeC{Z^^DvMw&Aw!jD+pZHdc(DW zy=cZ!Hu{7mEgJkDGetY_hs+z8KTQVDP)YernbwY*1^+?43=j$M0xS?Hsq{oTy~AiL zabqf+FV%t{?`ZcC0qhR;6Tme|fRorrN_(rT>6FL(k1g~Rc?||cM7q~J|G`ZzQX1b^ zW50@POgt()4DxsWyejxA<4h?PqCXD&ogFnPM+pQPX<0x$(xr03vBVVk5{BJ#aS{Kb zR6CPGE4k%3x|}wo$T?Kd#PJ@xBjD`m$i)0h!*Deck44J3ajmf zIU`(`{erGgezlNUrd_(T^_JfvDa(ilYL7VV_HrjB?UIg$5O=yj2%0UyCtV3Sb; z@M`jm(Y?llA@L^--pIAlYv=if?@v{=vXAWtte+cy)v#AT%3isV=s&`}Ae;)%b4v~| zetG30jKQ-`SliUoIGGu3QzZ8~=32yr^W$T>c?BgLQh1^if_EYW_pFeEih)k;^s(6R z>YF@@i4qo;`|~`CPsUiUiaTrMleO+>+Ud7}jpJ`%%l!BoJzaUNX3vCl@^mvUPe0ko zWS-=&uRVoq|p`AUM_EHQTA^1YA$ zo7lh`mJ?p=(@TB`F(+(2xBtK-w${uRaF1#&K-m(GYr0TXUM==kNvfupLerK`lD$&l z`885qdMCX$? zLIaOZ(=8yOBOZvn9I|D!rX?)=)^5uhgOhi+7lcc~hY-DcZBX5;)@Gp^u?k3>rIQlG zd*>xfm%xHpcR6jnM0+||I5aP~8X#t?L}^OMNh!#|zm+U8T~FM{`j3jg84&mUWGU0P zvoOs9m@s^Ga%mD85v2)qGeN5%^fhQtB`_)}bc@3}F{W}j!E9LVX#gb*Bf{5UOl8qP zpzIm5L>Tf<$etWHuylUieGdK*H*1NV?R3I#wrf|i(DlHI<@J(sZY|h8$7`@U*Nuw5 zRF!Tiy5BLOPa_?M&)^TfR2|R}UE*yQhM1{e|BgP50`bqdq~&kdy&S9qj(j{+oG%Pv zmtCHhalEi@Rc_cbn>S;3e9#ttB2){Dpl{_~+!D{DA0Gx5bJuM3ea?wF2(zg**yqlv z3%$%b9_<#<4mrMk_tqBPO7?6M7y}P|pvIN#c&S-!*dEV?ud_i~X&2R`CPG{Cvh_W;b1^r~BXN;coQ$ zoUnD*=Da$7k>6`a!_J(^lNMRxX4GVezHV!0ziz&Me1PECNq+M>Kg?68XCK@OONEtl zbMRO;u2L)by74?df3Y!!`=sqXjA!B>;2Y%SUlo^M5Dw~J=qGjk%vyH`6FqGFQp>%m zpxrFETb>7C&`-%Sa2UWU_?oNtP9CoQW>(Wt_sYvxh}&GECqCs z@i4QmY$MN$YU48Nuuqf%UR;Y14^OB8nkT3URk$8R2S9s)>oAm2k}jag3n4N zHR-r}u?T;o3%ys=0DN!a&R*iW`to<7lr=A3*UV$!ejkiu>O{YQ_B>fwY*leSN2}o8cd`WhZ+?HkjF_ToBtmOK|T!hA#j(|5lGJk&2SZ<@-FsaD+HA1-j_htRE zglB~FL=QxFFW{_Nc-q?(U^q_3Q-WT`L-i!-;ZY0m&mk4@3|cl02(H2wn?Gy9XQ=}5O+Y?WyzK`3)qJxHoq&t}umVu7|Hb6!}wg1^gp z&6+jXk}i)R63BPkihE^(ZMmD(IV-z)%)VsJ7$Gi!aZ1&}TQ0PQ_Uz$c<@Wv3Q;WQ# zDa1J7wg(t#+fSb~Ye_+&E!$?HlZsR}H z4{VfmHA82E&xXzqORQN78w`zWay;OI(s*6yrLdEC0;A*7jd0Qfr}^LDS`hI~MNY-d z`wdqVZ39GSQf)uxxG%ozy3(m1>%UO+BV!VlY=(uYlk?yjf7n3S7CmVQJEnmuJM76{ zyVNwtUM27v-DnBjr=c;eHup1pG*x(R_bPFs`C+sTRWb7+Tb^eA`Ga-rwWFje6sRv< z)LNQK)p73ep2PfyPEgSiDD~AV{k5?@nV}2M4s{U99M-U*Z;txL{v6X=N{aCpm&WM4 zGg~DWl|O_ll#hFrq2i}!5!>s|?fcd6zl9^si+u|O#G8IfynYG`qP>}|1t^F6_$tK& zdD_-P++<&T6SvBk);!0O98VJ8`z1O2R053(Msm1l4TTqOC_NaI&y#OyEt2DzBnouv z7ye&j9^+<@Kut|QTH^Iq!0X|lm(!M_0yM;XWN&B0`+q7qBujC~5kZ=6iSv8FV<+H* z1zc!9@p3arEC6(vglR8{r4^oAUb+khb+)ooimKCR?{jm^79hN*Eyv%5jkYz$oc+su zoQ5gh`2L;kb!y6ax_U*sQCT~=tmB&Mmm(#q`w&hoMb(ZD2Unls_En#NjP!w}l>$)H z&riZRh2=AmbI8;eZoZ_bZ>|>7>wq!(9#r2(l>jQRSRC&#g*c;nO3sp2$N|(aVAtkpR2YD%*Oy7fG|6#{pv3QT&VHv9h4yARK(oE4Ohe5aCpnCR zixf0{?6tpYL)$)W@fRLMIv*!^aB#)kQNfjbBljeB-)?Vo6aAl*W5$8N;NWdS_ue4= zqvKs7p^(<|Onb*gZJ{CPq+e30I=Io>du-toEKy#RIY5gEg>Jl+NqXJW-_*c+h5GOBpFhSP zoA_2Qh7RSW`(bRCB^HOAI~=4j%o20Ih+T~3QV}u{6KNr5+wc0`_x<}9kB7gm>-v1& z@7L@3OqTJ_c;0AnLHoy~o!Q^S!o1}(@Kpa5mFUpKY-hcnt4`YB6}&yiY3ha>kWz$V zMy4n@elAOSO|R6@7fw_*e&(ZKHC4IAIRGI5VEF!eS&)&V#`D2bL4V`3AJHy2ecbI3 z=B|&}*8C%-+mJnSu@ak|qXQNEo?e_gn;kLL-Q8ubZ6B@?d_YrtOX>k1mPX{oSP1X@ zOI-8j(gOZV;l0nCuwIb_9xuTcfK#$GkwbkIU&$uk;9#iAB7AoOGOH4Gt!2yD*HY6!dkWZdM*OGUyF`oZs3e7tt{2lnVP|FjnZDX3 z|4Pgl{mD}!)SqQif<5?85sFNhlQQ_zpn(A&sAs%C1SDO)Y90awT>H~^5y(^YXI^h$ ztY&$-cM6_pP~H%C z7M25NwzKWUT)4a93}rR&=Rv?RA3FC@7B$gwQ>0ia>Xy6v zc)bcqUyBA;XUo363`Q#%xGAvMCkTHw`XUQUtOrIQ?1t=TMpQ-v(ZX`44yF=T^)c0pXEMmvA60%$_#zd&hir9=V}nCv=*UhB&4=B1?cV`cVOWW_7(Ys zPk-Dv!Ea_o;;Q6pCMmnJ5kvtP6zn)-(V`tReeZP&3xJPfUReg6P&dFRmF~WYG$|_rQG9EzJF%c9dl}NqXe0CzL$GdC1*f5GQqeC-(dK?2<};d zIC?G&lO9Mv<+rc?u5gy)$Luu$zW*WI()mBor^a$Uc=H`2WSwmLkSn*#NpRz=pukkc zZ%AWHDVWh=!77JuKYrMzP(^p1uG##!87i~DcVH|4Fb4trKSP^>$=g%$SCr%ge209K~{dkyLgP?3*gl0 zlT0-e^j{-iq#0qT5Eem^iVz=26pF059)Rm*6&*@wu(2x4*6OR3@?p$NY&cY3^#VEJ zeLg@e3lC==8bp@sOVrR68Jt^wN^avmjqCAi~CDUqmwBhspSHxFt$5}(71i-UDF88ef(p$Yc zi3OgRK6=C{w_nKO;kcBG(s5PZ@9vrHcq>lUEEBSd7+31syDi1VX{8k_Y(z0IzYiAN zrfuDt+25A)dS%sBZ7UXHA8XEN_hx2LOG{r+dMZOz^OuT>ib8CVzJ>dJt>sdF5NCx3 z=~6oG%WWro1`-dm7d=&=|4RKgFggfpUn%-~eH})t47lv$@c}T$dgnH%xmR`|*vD`m z9hs>Ts+CI3S!jS47&I>(7*X>1lsN8^9Inv1z`r0>vEecc6H}FE$Zd=jwxJEPS2fO3 z$EnT^mG#-mt$mbpoedv;H$GH9+{<_X>V&^|UM1)8W-i4N0gp5RsM4sCvZUg4jT*{^ zWNSq7JnLWBd@Ch-U89C>?R*{Z%bNWywkgHY?PpZwE2R4- z{RNk+OQ>q^<1eGDNu>2EioeKbhq*YQgHB9hZ z1*ll~IT+9Gv=DmgXc?(MVl@l?T1fN-6ckz(enfo`Ucra=EqL>HvamDb=1kkbiP9@L zhE(bk2?il0g6_d!5cthfQ(Ep{8Qzcj5(hllO+vXG&%lnaNyKrf>C^0Mc*QF`0sd8 zH=RM$)H3sg`?vXq0b$lPkrM5EHBKMgAG-$~lJ<7~Ws-%QbB=u-_ZSyz|G)_w$!c)G zbVh*r(}B)8IrLmOjys< zuf|>X%6v}w#r|OMUTp|jDzRs2`*WvUS^y~UZ5|YPT5ol>ms$17$FO5WH{*dS$Y+D< zZH{hxn8mR&M=wVXd{eBRcKu<%spBKNhIL?(O;yZ*rubD|9&YWEowx{D90&G)P92tE zF3O&|ee4uRDot@e9rwLbn$mH2F6B!o4f*U@h2_gf3Bf~jpV5#NS>RQYUxbDEjdIN^ z%Db9$hjedix0v#$g%b$s9ruMrvm&TD3BzQpJ7qRuh&mq~sTmT=E+KFI9>;B+Ib` z#H4C|HdyvdyY$*^#Qu4SJ(`8hM*8qbulK7IP;hh- zOD-bglNhHGWu(UUZV5HrM$4D7*J8wLrnvY;hInm+P%#?G5yhU@1+-2`>z>L>V*gQM z(_7dL@HLzP@@E_#I+J*tHLS>VegSQ8aA)QmMGl<(=NU9e2F|6-rlSn_pV?gEm=wkj z{PA`mN|-K9NcA@Hz*NPVUK!oZe0h6#PbO{m?pyuuUZ~@Q9RSj$FT6Fi1!BS@NHB%C|-g&T(v*(2CX4UB+UZ^eBb+*7$DJdkC3z=0to7~b~b zisxr$91^;?PX|g47v$e>DhYbG45M>NM|-BrH{wx3f-Tb2Y*Z8-v~GwTa!}jKUG;nP zOHt#KCHat!quabQXoSkIOIqR}^yZwMoU9n&Oboek5B~(NOIfNR8JPN*roia}1bVE_ zKY&vpy6Un{WY*ipNp&J0lnUIwkn;{Pe~0J^(xUI!9>KkW9Z9qi>GzE-FEq;5e@4b- z!)~5ck?|}~rnW8Dz7(vCcRY$<<_tqFDh9eHxu4Bg=TQf@*44r9THgu#$FFy~$((lm z&#`mfiMGCQlGQ_h`-QVDI8eWt-5|Z2Nl<}4@Xy0z+rAQ(Z97xVvt5P2z*m(huIE10 zTkeHmS>!@SmQwD&SR|Z&Y_{E@ykyJxVBMfkjQ^Ibu7r2@KOrANN67%OvQD*lcJcBa z{2>j5oIlkcreB&V`isz97&l7s7rxOO%mZ1*cxpOqd*?x?+zY}X>`nI)AYMtZ-J&%<>6{cnsa{fE1^+)@1YySqbkholuKwlFHmgSRd z>^Z&iD%%KF98J%koh4&a`sjNy>I&@J*~@qfrhP1ZD7SaGZW@bpwZc$G$N^tKel2?%H zsR2k>*{q}6ekE^i`;3)`ZEKS`XF-XDggrJRUBKG&TI%_z;zcqW!_~q_%oZ`KSEO78 z4pZldKrdo9{2ML2lBB$z51goEUVjdKrvY9P{5L6{=th?@-5=n4+y`iXkNPZKf?j>n zt@Z>9=17svzyq?MUuDFM3A?OpJ^MzfJrww}e$|SA$~0#4gW1_gVq1=0^;fM6!Fo_+ z8W_Sw+22Nu;g}d#>WeZVdx<%Y-XKrSpJ7MO{F@9A=03~A?K3xr9TlVqE)LUE3}}zd zLcKfdP<~SO1|dSpoznGNg|(QCiFVy4H4Pbs1B8+yhR}F9*Fv4?XuGZuSCSwn+6}m_ zj7<;U)trQSR&}uxx8y)td-5}(M4S+lkl0BgyqRwF-Y18K5JcZpu58*vv6K2{&iOX{xHw2GHB#5h z7mosVWt!iP;HWGS7melNqHaBw|S?D30J#m(~m)dq)yGBZ1wkV zs2Pk=;2Zzt^kOvEb(O^E^b|;?B@vs8y;(hr+%pA8+Z44d-IRvZZk#=l69_rfMO-fEnPVITD}BFN2lj-4_fsxko3*clnyi|pdu$>4usH2xzX771LV-4 z989>G66wH@p49|$hl^ZHv^z>Y|H{lRXlXsB+=>_?^<00pUN=BM~A~=5kU(YY| zT42>p|H)WbrWSSe;6{6KJc8nV?sKh~B$_9N;u;WkjY&mpLuQHg&Uw;l3Ksc-`rmId zT@_E508o5ScOrP-=ll}STpw{>AshJXjBqRc?s#Ko+J)5CE#tEmzVH5&P}n2TW1?LC z+_uV5%68~XNz}yHD(D%KD!x^q#4bouV#j7{ivb}I7bLZ2o~|GX3ntLWr*w&}S8-mG zCt1QGJ-)s~yiR>)H1glIvoupU&Gpqp3-iGH=@BL8Z zkRpo402cwcw^@)ZccF#$ zZ+)PfR6+cW#}LHoEQf?V2{Wh2G_N-H86;B$9w5reicy5E(ap>-v5qS*L2>l?Jn2hf zwfx4HI_q~972ZQ>+f#d0@SCpXuyY=SY{r`w=A6`4jGl@y4kS}O)Yr2Mn~=2ve?<^+ zBY#hiy(g|>N0QwXmFjT1uf30S(RxXGRWAm8;VM|*xbX9np^)CZ5mT9kv^+N5s^ za;jr~ZqAI`q*ttJQW3lvk43e{7=bfF>Fh)%D=Q-r{Q9`=fvrm8>AZE_w64bPfKk+5w-w~7=9Zr9euEGuSa!|HV^?DTuMHgsF*nRV;$l&;oHPo; zkdKaD$nEbs+i_Z%ujqql6!`rjHifSk?DPO{xLv#EK5!~fKY~v6rC9h}3!h4G2y@iQ z(&W5G;H_`@IZ$M7+_7+-y&L^J(PtJ1_FDpXK*o z-DA32_sd;Jf_J!;`7$#Bvo(0C1kT5#pHFJF=l5R^GPzs1)spl`?MrHWyu-SqJmjJM z?Q>RNUoM9c^tWX@d1*xxnB1C_PI_K7>W~`^>`&RFxEq)0M7mAQOKnOIrk{uFH3t2s zXxpM=*a(2*8QF|OB%2{{?vG|+QP2(2jzhDbGv1n2Uz$wqfB!NIUYJiq9HHhmtN?>h z02=<6Z;C5V_s5-ah(Me9!@%>c&R$TM0VSi)PKcwdVit_F*A1(Zv9ron3W_Q50st5AwnRDP(uI z1+MwW#Tz}C0KQwa^JTnN5NhuuUf~2Fq<``c(rBiiBca>sdw=wQG*(w$DAIK z<BQrA&D?Kq5i&v;cYeE4V&px14S-WBb0fOx0?xvxFdAn&3+IG>fcw3|}+ zcr$~!tEsMAU$R+^!B&WLWwpt?{t1|C3=Et>;PEZ^>?$cZHhaJA`@-xzh3U3ZI3Z+U zI%@K`drt~-Pb&(KmO8KwO|qPQu)PCPg}`C9-Qc+|^hDB%*L6)ziTw`OK_J|UHFdNG zmq~L2b)P_*lpo-uvrgnUQA@T+IZQ-p+~ZMBzcWXw*ud=yQWWy-MA1w{7?OHUgY;@d z1Q`g~8$YNnHT^j!7^^6)UIwX)PdY3+gdNy0>+n&H*~f^v`}p`u4U%`?B_Acs_u{`= zx8KnIMq!)Hx9!ybhxi`0J5kKD9T+Sy{5&s%Ga+|{|54xh?pq32vBxQ+B0Z#Xq>jLNXHVfG{kKCBc#7T#=$pRw{IE7=aGEQa|v(Y2A}>ET?Pfg z9sjqlw4>{o`@Q7noN_|t`1zehaET{Shw*-28K`)0f~txD6hE!oj`y~w+~|DQq~^~b zLFFi#lWeLv1E}sNz#ypYc_Kr@YC!%}Q2&)&tLJmz#$?(_0an51Bt0j}Pg?f_c!ceB zcGsx;XxXAj)_kP4CFQ~O+G}ZYye5}FM0`%wTbNhZ%;gsF0o(kcnLHBC7ojGQ92fz@ zVWH2g_~%B*RIGXAwBo@8UVw@DgZxMAI~T?HvfN@5-oxgM{=NL9@{b?By}!{vkeEV` zn%XZpcniIK6ZvavSEkR`?={HmI0VW6oAya%PJu<1)*+#Yf9!v*v`KNmyF?)N4+A@% zDkZ#;2f}}ov}QFO1chb=rL#zDgcRvcez1Z$?g4H1CABbzr)SJj0cA9cOPo(rM6&)Z zDcNFD$O5@X+=MhX_jm<&T4px*f*>YF&;?Ro*I|3WZUn}{ESB*@k=n3cx-GI*dv(Ge z>IBY>Nf}%`Bq{{dFs@b^==CK)?mLTeD0uYaJisb=myjL{B?3jd?Z z+b=AAxoWb4{Vysql0G}^5F)0JmY=p>n#%)U@Gx0>zslrBKYRSRQQSY^kucoubtC5} z_1In!!jjxu9reke(BJp0%I^L=Z-#~p^XuzSkWd1}6C0y6dKW5fKkwdcU4&9xiDaPV zk*&*h8a7fMo_=EY*f0?iN)`Vyva2vx88Y;n zl&XlLeQ$2V?+>@C8RMeHjtAE+ZXlo#}0h)Up}{wU3*n^G%reCmSK{YIy>G)FB~Gux>1 zgf1^R^I=jM7ke<3{EvG%`Oq^j3*0$@>rn(V^PV5__ZvE)DJ9RW*9LFLX)qneOR=RdbR)Gx<4;?d}#7_uE-! z(Q}LOV3|}RdOjc&%9p1xP3Mr{i3x|*ufu*2htQGjk*UAjouAvhe@SKAr+0^+{jdCJ zE9H8~JGspMFMVZjGqV9?BDG!i$bS#${YA1>A}c-J!p!l@h%~XK-f?X_16NWr%r(J_ zrea)&A#;vg?pe%CCy}KSynWks7Kq3^O9$1$l5`3_VLoDytbrS3hzEc}PTa#A#5EFl z9Pz983-(=7GZ4Rt`A;E~02JKBX+8y>VP*-LpD_omOCV?JznS(v2U-MrbFsC|QE;l%3;|JJhO9%w-76+np7qFu=(BX2AYPU=vP{x_l6 zsckAup0*6KXxd)R#P>it!PsRNrbI+{%%DMxR}99@4WDo|qYucqUxWF+G36pb@=&32 zW+yTejk+<3P&v&x(Crc&0QZFJ*uFN&=fY$oL!Nl{gGy;VPWxv|5>3<9z28DMBa3RZ zTDNCgL)NQTYV5nIdc04DDMYWD3y$gC9A1l-Mq(wd?#mK3UZsAIQpC}!FyssBmJ5dS z>btFG2bSfrQ$K0&k9H1y4prR2H+pYwUoF+JzPYqK7`=LlZM}2tNn9BGFgZnc(t^S;l1kr|_n_;oeI-*U zE$ZeJyP&^p?Ffp4M4G~Qx6E>;Zi>Fk6!{+a%PSC~N8~rQ^A@jv?{bQ;N+ygJ@IG3H z&2mRsbBc%D?=B!F_n;HYS7MEfI7>|9LJn4*!^2)Gms*6Rzj|hvqG$Ll5e(O`5MA*V zoZKq#`KS#;#~4eCisd_x96_wip8{}>s($%~7K<{vcNUQzD@IY(SRA$6C2u3-rMHyC zx|x#(h98|=h;SixvQ&vyg1$4})&BJ1A%FVMLD15eVU`5h{WkTo515@CB_UMReIxQE zM@JO1BcsH!rB{}h#ZEW8+bfPL4EP(E$o4!8X3{#sfU0ks0xqo z20q7sDz2!oGr0Jk0z1zow#>U6`#<@oqp8exO#oqXV%wt;I$8A%g7vNzoc&7tfh4xU zHz|933hN^*q(tucTgwo#sqn(Px&Vl}Hc;@7C1vdjq~*V3%dZ#QI3>7kh_EKyS;WXj zl4yL|8(x~_uA1Q<|Fs*DlCm$Xf$@f)7{XkJ6JL*olQQGi@=Qe=A~-K(I&UAYGn|(G z#~3CAM%kD6)Z?o!C`ChnzMmE-3IYXuG(wj=aCr&JnTU(4RR@-60kG6H?sGAn0aw*l&fsMe9%D8M>*l@u=3ZQjTgi~WP0o}cKUS;Bx(U~ z*rmYY&0h8RodzDVxODPsl|ci!9dZeu3|;P9ONaLG%K;no;d{kVyrGCG3U9=u?CsOS z!gcJp!GN-oQgy!?Mk+&ypiV&e5Zm>(W@={#dHFm$2c(;t6p0coo zU=dx?+S{B+bKTDLL5rv5!k#91!=Ig>x)u2XMU=?-DH|y0AW(|vbuT%U9Um1bMuuc2 zSU$a4hV6f%U&*ZX=DtMj*_2~sl>Y|?O2>0598lQhyA)@1 zRAT5$k;y>bR-~+2AB60P*~R%J_sT;&;y6Pn)%t+dp$9uU6H2D0NxO6rq}Xen!-^)B zVfN&F7tV#~oQt;?8D;AU77$V+?<}cKFd}eA7hJZyT1d3y5hfkNzBNSLa45Lh*I}PW zJGcjol(aiyyf*13{DDs=bJKFTr$g7l7MH0Wx>BIRW+!UYSFrO##`5Bo$GH02aTC6g z(lKM+F5!u}LfF|#E9B$PHR4CB&mBL9iP;pB@M5^lB6?18vtK9V3n~2Ar;Ias8WL#~ z)?Pi~W`A>{DGui#F)snzKcu2_)p=lbk<%_mtx8`-b5ZTNCVZs})dNM>7T;jdhe-{I zI#Y&*Mm(`l`A0Z8I)^buV|3O?W@C#gDz5f-q{k$@ZYNu*b1uN-{~-8?uSw&89=zqr zDG3|lU|alS+m19L`1Zxsh;h$bdjvRrzMw@UmT>T>MrEz4;kyr?>o07s+HH&H-3%>`wcq4BrTX1NUhK=0H2xOOif$y?x^&G7ATb{cM#6rv=MXH z-$wYqQVKKZ#^!slk%q>E{HXv z>8nHnyB%vnOL@4w*YxJ^w0@cMDj{ohH(9Z?!7I(D;F_VH9(&w_1meW9^Pc0eRdQtq zp&^5y&_rV@=aa+Zp9<@ij-6F6&AQcbiwWta5M|FHYDR24F;IN<##G99@uz?`pu%57 zVU`=!0BzGDp`qrB2%IQ?pxX+gf9z}mw?sB%nAFjE?ef)Cuf@{Yzxq%C3%9m5IeAKh zsu-+f5GMw&bv4WZq6;G(2SvUipTJfo~ zCuvNVvxo#3mP8kjeO(qwBLs++I7VRgzXdt09uo}6+jxB#&=`_IzNncg z7(Fd0U*n2a&}_g~p%3JS0u}prfLNHA00i=r=#djscpmAI3w%nl$=tIhB#kxaU@;5V zPO6)l$$~BtD@${Kq3A|$J! za+SqXjmMCbw&!=kbI5qEsrtts%aDccIR$m%dY08cc;G3%#r;+ypFjfzj*D8>D(I6frGSeCnq-9a)WjdjB_MO4*J3z< zQV{5a`g1dW-PZu5e>9BEeGHzzN5i&)7s=c@lxt!RI`T8=fvJQL4agUy5=Kt4(EnmbbUyo_W8KIYZpLe?Lg_o1Jep zqHD7-cbHG@B%ASGP!%+IMv%PPC?o{C+>7h1@1SnSuDZ6d^XS@ruu4d3PXh+`y0$OI zY*EI^oWIAU*clfDpH@~k$;Q5x>ku>JK6_U_BT^wpn0pKpY!fBtnU2+jm!WkFSFc+2 zPApfMN2q=&6Rn1UB1aYYB;jvks`NPu%W%(RcJE`3xNx%AbsgXEKTOPG60E2Z(a?|{ zCrg6`IeW8qVZI`e!@6M9cLE{oCYK3BK2%(}XDRW!yPT$Iz8PpHare*D=7t-ahvEGf zH^49CxU|Zz0*18v(M9*sPQS-;R-o6Zdy8Y&%YUfdueKzvc7zIp=Z zrg>(_|7nikU@TVaGM}$+R6EV;!N#q*m;va1`@ff9_URqHloZt5wyl-LP(>>(@$!_okQR!AQpKk*CcN#Ms!=l=p+VG%2^h$Wz?Q$dzL@$RF3W4 z*tv+^2aT?;A4@N#XvUEvd|Xh7C#2;AIuttTwXjY zjFVGY#69YRU&)52rxq5j58=$L;nC4VmM$*8y^k&gb9qz$7St0Mu=Tt`A=gxU6U@bC zPXV75x3N5sUny#om7UWFMs-t3EGwhu?Cv&1mjsX;YW;-$1HhNhNXDe8)5eBa85K!v zX;maT=h~e}Q=}p(!!-tPhwC!S0 z`R3vq(rw=G#Qhil>t##WBg;I}tk^K007d$)30$*DBs3D3M}{sO&*mpm%wnt5Sh(e_afK%<97>_ zwRszaUgre|FL3cP3L&2%Q3px@paMrx7A0K9%(xC@>Oc}l1Hl*pNZ}r~=k#SVbyS_i zU2>eGBU0A1IcjOOg8ktoGXwg?>C+uxupyi@`^s~XyAmF#bU#mb$RePv#yp!vfn z6B~b2DHI#4Awg~9Fc#l{z;7@EW5Tjy zjLA}LEG(+Ay8O4O-3r_+qfV9&jIMrM*Znn%1y=UCI`7B@%RUdT3F)&|h=h|^EM)v> zABnE|wyd%qT^1%&whw)~m^zMbS`z~FYf+YD6%;He)I;&i_7}io^iyondeDE3YbTiT zXczdYX)?ft_`uIkqd43Ctr%P$0Z;Md3J1HG)0o+L3wunP=ECe8Wl`o%b8~AGU@I%v z(GHxOnqvk_6kjcYgA6CZZ?$#8I$hTzP`u)5MhJvG{vE)cdjkXfuq>Y}QB8>RQJ!R?t;2C#w$iY6mD9pAk$EUajTG-RfiM9`jF# zGYvE*Y}W~dM;s!B*H|=pjXW+ZPQ~y#g^92AL*c)_+qoT_)Y4~rGaYzESyoJoU$MA+ zriUff$ccJ!qVAfXP!?wtl8#=VC399~bt`i~y=*fw!G$q6Eho|4Ja5*CNjpl;WpE}Z z7BfRVbToE~RleQ~!s1{yn);H#oVRAqxo_E-K=a&rr@!IyF(fm+cdLz%mLz3{`VIry z;i&H|p~K&yNHh6~o7!T5QB>4cjCev>AXE(z{P}q`A2*}RVQh+}geYJF->nNQ8E?+` zqtQ6s&r2lIJHLEMM`V!rM{*v9s4VT>I{N8triC||J!??UQ$I@#@9{1dVtSE~;&$z- zV{t)*FeE~BcPEaY87$eX+d{*i)zDJ=n!NqQvaBe+Z)H8v-(Z3+ z7iP_Bpaq{gb0#sv7`GC2Soma<34PB=*GZ_IF(9Hk%i^wX=`L;k!|!MI+W`Fcj!yP0cADJfQh@XMf# zQe>idHjgG-xhN%-Z*M;sW7 ze!$UBxF;3M(|!_lH!-uX$skafGb5KG17#tRbBw!t%|$8l(!&4+ODDMbP2wM`e$kri z;WW&dKAQhu8V>FQ9Y^w>}G(*^AmxKpS6dml;8^ZTAQl_NCsNBg~eA{3?jdDDtdefgRu? zQW@QQxu18DPos0Yjs*+lCSCIA4k9P{&chgILkr}Y$4xN}->}QKhbYJ+x#poU_~BV@ zo1C546Y3l(*3;9&ahJ}L``Qi9GR#CwJ2W~9gBPxDA_#Fmjml~wmcd!FRGo{ik)>fT zEJUM+nRY|kaNF7f2=nSNOGiV#WD+0C4EBvJo~{h}tqIBAym^fJ6hoc&V_LlAinlo& z_1e8#Ci*2F3V$lAPHCY&-50sF5#gUtYjahX!DSIpr72;(21sP09;pg-UmxG)Mz|XACMG!o_ z0*{a)C(Muu_($78s;j_8>pw6m+~FWPsY>@%LE|;+KF+II0ZPgS|lnk_pA!j%C{*w{OZaTdCb&XhcGNuWdT~?RwmdF$SvD8POj^y zYv2UneRPN%A_aFdvFmD27i}6q^45>AH8+uw&X9qhl{B%<{n&llFM-__evZu)0#iY1 zuGmimi#+8Mt}^~#kP-tS{2WUviRA}hBQT7gJRwBhh2+2Wku#J293UZHQcSlmBv2Ld&bCVf9 zC9H&7K!TBrHxwWt0qq!6u-xKYV*gBjEqqyh2S)Ju1A}?!>-+6;W{YYIO=8HJ-$Dq| zkH&oeadu)*PP}KY=1EPQsdud}pflZs)86h6IzKT3uy3WzZ#Q6Dr84usDqRphj@-+nCQ2#_Og4K+xO*oVG#yV=_wXuOfNQUkNCL@`AC~pB;;#Hzlf8-q5mkQt;dZe8k#_0l%-_ z;s))=t{H}FgoqSbWmfz`NU4Y#~#|D$3{PRAbUdi@o%lr zSr3_Q=}(cYZ??5ILSr7(drWL)#=`Gz1dV;Y$wH{-ZTsyN&aTAsIri7oC@SL?>s#)r zFNJqk@4a$a4zVx209}fg>fpAzcQEg5GrXo<4j<%lQU)oSg~gyii`&gsvSsAydeHRgDU~3lJ z*0Va=-A>wIix2kzR_}UV8tdj#!aU^4tSA9KZ3rX-WnuAhm1y*GH;Tn)P`3Yu}Rq#9)}nTnC}=A!v%K__Rqwdtb25Gr=BJge|> zFUr;k)#1A3P5o*znFE&XiPc<1S&gS12a%!2K2-Qag95v^py!u%6w=tNu8{USwm6~> zvM#R4>T9t-3 zRU=7dcmFd!3X7I;yP^cb#*t6?J0_L|o=Qo5to$FEL*sjmbn`7Qff|Sw;+z4A8_^;~|Xk))NVN45pF$VF_5VKMa9}LFWb1 z7l?(-29q;QI5}Fg^e?l2rd^85hIf#*Zrz&j^iVPC+4&eA8Pet+I=J_EBwAZ`79ZsC zJaoc*5nD`N#Af$^#ltKG$|;G%Jkda=|4be4j!cl`?TrzL zWchzazZU7QJ?eY*YsH^F=0c+lj5P@>Ig84;f9W{Tdr$(51V;(3Fs+{Tp?d!*2dCVN zUBP~xrS&%GUdl59G*}oX#c5d<8oobj4&%vMCCb2&t@Y^a%a~R%yIfBUWK^>;C*FV+ zhRo?0p7WVRqP)Tj5369kF6jEYo9bF4FG0ONywr6*K8f4Ak>X&~f%9c1KJOUn@i zwCCQhJhaPE$6f(v3ok3n8Bh<|+F&YNw-FoCWoJk!q^jDj!}pPoDi%C=&;ab*)y~|7 zN*!31eT*sR-(6lrzepYTjl~D|Rz+y_biE1tEB~Ex6QygvT2^~%7T-nYHfQf6za2a(?3z9k{wqruTe5zS>_l8ga^E{u3AD)Z6lW z1)ugFQ<7=xAlaW+%kLg!?i!9_J=Kx`lS&1l*dtD|yF8Hjs1?`R4>O*Z*!zeXtR%|D z3O;Vr6OPQ5eAZRkkSwH;l(cRQ(SBl|kH|mRhOV5_E&Dy76>@mhYSY-_eQ^(sh1R-I znD&o}?6u;c{-cV9#TA#alzv%I+HRm@c| zoWi|%RY6>K$_oS1B~kx=8c2n;VKlt1G z=%@`IZjrkC5BaDe4bv%~apt+f{|;O(A|1WKHl0Eq)?D2WvwDdeA))%$_goHgXz}!W zjbwayn!OwOVV(7mnlt6B&-oP*gY$PrUZ>56fd|@9-)$&pVi636fZtN=%NS}v1qFxVD2>&V z6?^g-;}gf}b}5%x-kh6A_~;ZW(42N;OH%)2`xzL&7=fV)=@J*$tO=w)HT;Kl2nz*F zIe^_t4y$yqZB(7tLOt-X9s@>4y; ztjA0c~EjxVfMG3uhHRCyHt2TYd&pr znfu>dlKEz!oN783VD`2`4elkL!raq`sJB=;?$BKAz@m^#r}SVRm8w!SRELBhqa{G zGuhVAfcf4eA(YjsBT9r{I97Ut6!m>nsu(H6{XeGOJ)X%w{{O$WYX^tf$Z<{^D&;tb zoY|IAy(@G=B__v8S|Tck&73NQj+DbHz4I<*;Vp?=T4i!tQmMp9S}Eo{r|o;af1l6i zcKiL+Ke;KlU6GmaQr8wB z$XLZSq6l$ZM_){)_BJ08WEHWIDm7HuI8{vh4;CaOaruML1BHTH+7^H-OD;zeOu@10 zh!9!s@q*IZRl0nBWG*o!S*qkw*7^1=A}$F4^(aepY_U7`7VOb`Pv{M8&L+ z050G-AB<_bzB!`CK`!x(u;h^N`6-c?BBmFnh5q|a)c8xZLl-^}F*0!d)U0w$~6QZuZ$YoHk_t0w7m$0N?Ehqzh{R?^4!QesOUzRGg}) zcwCYK6FAfS3!zQfvfKK%u}4DLLzgt+vQnKEsBm<4GU5VZ~d^R zeOqzGrI#fG|EO&8K<&`gvEnwyQ9Y7jtn$7e$loY4L2EPN;TeQmky`j`jl@SNH!Hd4 zB(TPZ)xEYZM6vHV^4!)dpb1em%PtMS9`zJ=QcMQLEUL(3t8ZWxXstJbj47N48g>P2 zSbqsobAOmXIRHbnGn!jl^XXgYY=p-36+@SBT!fPF4cga@u3MSyX(IO|M8SAYaan}G zc}3m@7p|vFbX;+poaZUaBlLhUxHC^e1WXZ)PiL~(QGrvR}_fb7AmTy>llFv z5PhRB5&jQhyn1!X7|C7*Zj$2pt-_G@B*@E9Oxr4?Ur2*q6D^jT5LT_bF;;g`Unjbh z+%^F{tYt-g3ZmF=8J!4-?wHn%KPnLpbTMU1Xi2SM9@SglUCF!fBIJ}v&|h*rHEZES zVh=5Le{Vw_F<9liMHIVhZ{`a*{j>p1sv# zw9WAPJlxZGp?UKwrTXokrQC1^&i&zwJ{Z}?%|Q?#%~bN4LtlSxI(hBlBQ3C8hP^t@ ztv*cS@ThEq(7aMcq$k_&C4Dtp#(AP6!<@{agYR+;-9vOX``*-TmrTDuA!>eHNtC8b zbv)#9m5QbmyUkO|$gX`FP?T!;0;$USxO0%EtdY9+=UCA5zQ@;3_dcTXVPm}V;|v^3 ziFT0eqYJt7;!FR7BsDQcF%6Ll`_j<&d9=l%y}bcCw5>VxGnZ&t*JwWTpaBO{(u^bk zz?oL=T^O-*dAhkcm5I$$Yar?Mu+e8Z-q~60^`Prn(HDSQohP9)0gXfZ@M(WdC zx^JKj$S1+y4O?e6g97-#U7-z2>wHqlWNdBk@IfJyrd)aN%bkKr4$ErQY1HY$$ zmGMi;fp28W;<+af7$Z%T64x&;>v({b+NZ$^U-X6yGL{^)N#8-irI!$wZ74ps$#;|H zu+?gwdyeStB+Z)bT2LWMUfd?~R4U{iSA?a~UfZFcuu2-$VkEXuaA1@cshw6ZR_8m4 zx*JnzCkDW;GkS^K+c`CGAJCA9@slW>&xO;*)9@1U6)P#qU`=2Et9tG~Y_kU$yFLvA z+bJI~$Z)JRi4nr8s0cwmuq(3AtJVDtC{i{1$eJjZuak9F%h$S}3+j=+5*e z^xrl@K-t=qgC+OmdSQc*fk|HiZ_L#tHiswke zJqaSvn8+=TW)!foRN{Xm^{PinJ-J!gZk8yjzej1VGLuQlVI z%!D}-sF4`M(U34U?ukFeFv-q>{qJDX=5OjEqYEN$Es726_mc89s=@yf(+QtoCsb&R&L||amR_itV=;)U(tS& zdVJA$QKl@JIS*P}wWAAYOyEPVu zl6f#VC2by^OjhuR|I{usEYq$zijR}a%C=nA5i8QZt4K4641JDYCi_c79t1cZqg}R! z54OS$gv3|)@^D21{rRPzc6=K9SB-CG%drxQTRp*zqMhiWEU6*AdHJmg&4? z@BbaN{@Bu~nT2)DWaLq6bo@dF8e(QF)26oX5hnwD+U`NA=8B{71}$|MA~B3$$G_SVWpuh&K8YJ+vvNTsa| zSOyqYN-ck=psUJ24BVCHB4Q7Eh-ox&Nh-7YN zkJq}T@Ut@p~&^3pviQ>LdjCqbx|5dOIeTg|o{{7ap?Bh}Yw35~ahbS?Af z#+zHz?6Z+UHZaZ2-LTfepys2Tl=upzE=f7S*azUHEDVss>GWkB#I(Gp`e87qM9=FJ zV7W1EvHnzgB2mi1s;6Cx;Ox|w4xjP;ahZ6@n`RI$BofF8^cS$zV;hcpd64e!x!$jk z!ufVXZ8*U3#F4k+}99TFmi7X_tOcXiY~WtidzOM!FCN) z9wn5KiQCP>?9gd`Mxt?|+acLHiUS*5*-qQuME_|}pvqEqhK?)z5~X1rijwS<9nK2mYSD>4qt`AnnwQDrhRYj59dq8uz6YQ?88+R6%|Ap z*1ifcrGQnP0^4rtK@S1A`iZP3+KXCVh<=Z}WR4A?F~aCPC*I@vpWtlf_=D@mnv17P zxktUBCCU7h|0Q#CVMy9<=)}5owtrSyH(dD8y!)3@70&9>7>>K^3H^aRE!V9}Jlwh3q?@Zy%cJ470}?|{=v58m!?B>p8yxkVf5R%*c9Q&UL}~sjdIaC)0uN8E ze=3OCc+zB>{->nq!}-g(mVNpB6%p_ZxYMb9TznWdn7CWPEN08!Iy@j?(+#zwTxEA$ z$UO2UQ5-`fkm9Q0aY}YL^TJuhc!uIgYJimWc>~#@;+>+|Gun483#%@KzniU4O#%F3 z&#g5nKY-CCN2WcxnEq9SJY355H$r|n%sq=2zJJY~U9}lkv;7jgll-?2W>I>|x zV{Da}2$6+@xB`)P>exUdrg#^&zgoq`k#&~XEy8wWr;;CsP;Z1|JW#QdQ_UAe$e{U; z@4s#o(yx8E20e&3WLYIP@-gXTyz+bx4*K)y+iWrlX~Vcn0dge1^Z4-gxD*q z5|K8KABzx1YK#CG+Aup_%?UWAoj8Um&o@Lhy!hGov>G=zJ^)%jTEJexUfskUTJhx^ z5UTFZI3?(m{O&&>DnzZoMOp=#m>X_bxr+FbWk<(B;rF?P+*RkV!5jZ2?p`xh%)0gT zL%^_?>Y@sB225lST!Nj->+x4Au}&t>uI6X6ji%|!Vat@o>={RaM=xt8wdSfm#SZ3{N1EIV zkB({iPAYIF&o`wSEsnqvR*RxMzV_eP;jxbpF(kkP#+^?f{<0>!g}%mNP9qh!92Y%5 zpbMNE-XMu1kWsUr;s!bitA?_wdYfHq_z0hhrR+|QS!1j z5nh$#y@A1nq&mmn+Cp>^G`mVFIU?eko0^!zgRmiO?w0}JNzXFa&4o|iP@|lynapiv zH$gk193-0j9MRP((Vu);`~b@lWUaoJ$l^fUR(;=R0iL_g53Xan>O|d6huyg3^6d*S z2|Ux9G+@&Jmdqn{QNZ?ntj_2K#Uj&Cq&KSA1@BDL`Z$?taMbb&)6-+6YK;N3W7(Bo zd~bj?BTdCK}z{klwqFi+2Y}b}kkR2z} zuD$1cpvxoEEnKlP3-k<^uq}3BuSxdG_gkRmj%u;)Z|Vf~`$)rdt;wbd zm-aV3>4R2Gx&4|8ER9&eJWyymLl_^})#1tI%XVM6Ld4T5&!{8DrqmHJr9cOHYpVb` zS1L!Gtm!BGT8XM(FZn*Djg!OK;5pVHdf#N_tp{CPg@*T{@nEgYx$#oFY~&pMugMd( z4GYqEdskHj_EzXYK^Xf7o%QJC6>Jbu00urp?n40k&dCXhUV{8@E$lD0FLk8s{rhRv z-rP)^sAn1^3B^kovR7ai@}CDMmHnTu7^cwzlY0E?mBU}JF00gaWUr(LkFO z&TD|tC}YAJ$b}BmS)=n@ye#bQQJ&oXlC{+`wgvw;cCTesa#eo&v@m`^8navR-o8xJgeY6EeacTkS?Vk+GsUM=f->sn~+>M`E21$xH zC$hfV>B!p)?QqkmU{-OE?@dCDrfBM(wP;-l*K!AU&pzItVzOhJUorbeT2m^=J7S*j zd`PN(p%!r3t3xSoJ8Rc>DyNP_{XB4a@HOWdbTp$>CxHIZic?#Q(7Ut*X(pwz9_XZU zo?Luv2X9#rdQ~`U){NnrCAetikb-?md_JRAXQq?nlv7=^`6w;xO0h+ZRBj!5Y@ zsZJGqxB_^HW(7B5b>BuDOoI=^xPELW(yE-cUq&}b5cX3dM2-J&@4n@(>K3UlvP~X| zR)q>*;A%D%5(P5s^AHv~$=Jah24L0HXw`HPcYj(!j1?YCvl@s<^H^n8es-@gBW7Oo=jmLa91YQ}OxvUK( zFH)fr+4O`7X9cs+ag9mR!cvAAq8ZsYm4ZopLXGmJD3%olTMM8Ec)Ep ztLUS^V?MTNK$b{xy1hv%4ajq)rMZK|yi_$OCx$|xX6)>=v!qZX38GtiGdQZY3KBxn z2h{N4HErWY4O=x_7Xrp>E~cIKIM#gaVfUDcp!WFrF$t3hn4N>2)NEOI}; zcv2gqi|{qQ4kq#@d_=R`0;HVEe2n)CsP^WvY(}}ESh;57G)Dn085G|33V!?=FD-qwFrQyaR1P4GavWWOCje3k4iU%&$#t+dL-6{rL42foJ?lEM|+g& z^)zP{Rd)hGT4?93`sMPjfwyZ6RS;F4G@ZmtPity${JYB9IvQ;M$z|l&+SGI3!cIDi zo+7C1GbO>u>wQN1%WvI9RIpNQ`Zm?$^YyW3ky8rgxA@qi9m%sptH5lziW7MP)qD2Z zHMHTRLc{v8{zj~)L+u5N4p_}}=)T!M6me8k+Vb(i7sSkGj*pP8sc^X|1)DiI_4Xm6 z&Nx6NQP)mP+ZK9a7bb=AEv9)WLqy*p%<0PQ8enCqJO__lMH^}f2ySbBDN`P%)jG3L z^dApdx`hX!X_;)w8lxzhTsHL~*}A1poHP4*XmR!rgvjg?@u_qJW#1o$JvNArX-+K? zl9Fvy^=keCR$_ZtsZ*saG7(Tcr%Jvi~w{K%zzKAeeb%OdNB5gMNW8!~VQHV6$wQ{+pE^`FF`v`=5?Y>|WGDz4jn zIS>`~WToW(0T>8a?mmS`ly&=v;yG~g1EwzR52VlXkd^i_T%Zwi7*b24Ul}x44xX$G z)oZ4Nzp?*6P+S#!u~Gt}n_slHz5))_EP*5??DKVm4+TilW{iiQauU-ZfSPzk&(<8} zd}5fINCqMtOs-6jQkMIpV)a!J-JT*>as7IRi^g@;(7Mz)Lr}~xz~duCg82j-Kaqvq z9}6B^nK*}!SM+dXzSgX{q8oSJb=7gQN<~dm$~;QH`A3+l#z>?TsQK~fguuf~D0-

~&RUuc>VDKg=mIeqV*%k+)!vIjqQHQ`FxAET8fPuNLftC2qc z$Zc*EyDom>zpNy1z?49O(bI3ZJEy2T8wHp0ojQqvo~+zb9h&*BAcW6_2t;P} z8p)L?->1s^bd^5`%uJa|M$|>y-j+5Eu*@+!tP6fYn8OxVFXZN8k0F5g-*lDZ0Y5+o zJ;h0-at_;k1aTvpOoKm+^Ww$(rygJ zkES=bLmwYUq?PPp^-aJEvS@9A+i<6G`%#KbAczty=n&Pm#=W&uGPy=q3WN7>o*!}_ z;Xe@sCl5~P)$2Go-oA;g*4r;7w>Vn#3*Q?(2-%>Q2YuHb_Fh+YO1uE)X@Yg^4iXjU zxt?Lwyu0SngNjw^{x>#xkMf$=%56!-UivycZVY3g4-YIR_1odp zCi&xS;}#gOd{vp;INgr~l;`f>--+26j?R?ud^4992{3HBlXI<$&$r=c5)N8~=4*2mx& z#ZwF1xJMGQU&IF+h_j^Lht}*Q2@wrRmT+$OzLR)-{EgN~R(~|gc^dZ1PidC-Jv+XP zkVKen#0c+a`9qCMB$hdj3U+C!4*v)T9>$`NDoW8ca|Grh5GALsDG6Xl64`!V*h`9L z{Ijln3^0gJT6}%9q50DAT0V2J)lo99{C`5i zJ4SG`^^zZ;a5kI5@}9#URRp^F?b05t4-EkxqNK||wEt=$)s&IqJ{yKPYfF}b;40~r1G!sf1L$AeV5|#8T#aw&(ylQZ zfzL>Mvqx9g^|1X_WMLFr`w-y{f3)@ShPV+YxRPa*AeX0IT))sJneMp$cKU(_GL8Gm zKyj^T=PpJlzLy8C8>WFE_vm)+CzujDb}RjQK{Z9pxql zP6FiDptJgqD9ZwnL2;#zp}w2vdFbfvFG2n^$kqhj?+M5K?t{@OVeEKgCPTg9hDM#X z(r!byx)ZQSE_oM?mN)pR`X0Bs5U!1Vxm=;|2Cpl>IMY+oaX8>hKKG#)v}#7)yx*4| zNw=}n_lV0Y8~!~c2K0-5pkoY@TA>znLkhu(EgAcM0&`N!4}(XD9{O-c^W~2bZKj5j zztDyvGgd+{m2<5gS?L)8JkyLjuU>8ufp~^aWSIC`i%+f+p7ayWytZa@hPgL0dRZSm zw*GbAhV_Vn-cDJP&Vp`=n0+&3Ohd-^_c!OD2gl&<;!`K~85GOWaCs3uy-39viioIG z)_y`S>qj-KlW;H;YxOm9sY9YtXPiUqJ^W+jJ6J*zyZ}DeN=X5j-=AyMkLYZ0*#e&h z7S%28h3esp=1V*O7xwMt31}e89s;5vWN8WEGheB`l9VKODkn#z2X4o#00}r&%fdG3q{u=r zR^y?ev;h-KRKqoexZBS4^ObCWF^uB|%u`@X&7KWqpO1w_zmyF9IfL24C2~0_hVG|v zj_Y@>zcko-*_3a!a{#;^m4YYjvB!EvLrq~BL)F#->@yWWG`zN?5>CT$uS1(_(DiNrwE%IA-6M}HN ziW4x|ho$#@^VVndYy1eWkYc@nESPrZH^RZ2gCW9gpEik{^~VP|x-as~{X-0NhVk!G zSDs-EQMzEFX0bz_{xZZku-oDdpw-}yIi^iCAn`!4cXe(LHdR2&8b);0QYSr}Do3=f~e^VTgwmF+x8Nga{4>y|0l& zA*~89*7mb9L03N?{%)3tZ6q!p3_=Of>6Apq-=9gMK1Wt|e2stQp_k6;I8;9RD4r)A0|yS_UG~bUap@XPY072{IigDm2-?{R1RDau zb6vmyp7u}^;GXdf**e6q+rteHBil%9{kUJq2}0X6LMeJcy)#<@DQxD5{?ZfMN>c2( zRJzHp-_g-H?t??n1)PY@sSJ9qyL}_a9@W#cn;7#o&Eo9ktC!K^lvOgdw z{#(&LEf%%>owFqSA_C03DyM+vqoxN)CwiUb1 z_JwfXqbW1JE;o3zte@D45CgXYeTQfNrThI>E@cFbX7;c3tX2NhC@2mKXwi7e$+93Q znUyK#hO`+eMWo^cgQ)u(FhNEO%83GlDCcMSg=+k^AJ(vG z82;2gj`S%-KFM8<=uH4@F2fknF7nEixaWsZaRk{hQLU-)eKogG9t!F0qNSXOJ&vr@ z0v;A2|NZJ=Vjx>2xXhz|$Jnt5k0X{^$d=X}(3^H8H>VpH*qVt~4Y96KUCUI_zYu{P zIg<^(DkK^rEB(U3pyfIBx&e91lU(Q|$pj=3ga)ZHcBGiTRmOf+sZ${1xcs)jiTFx| zls~?Mq82;8b1(?CIey z?r%Pb%VDIl3I7lyw$^8zmH}UnTA|zm|9r6A{9_9`QLM}R5Jn5~dsucK6?jg1b@0{s z>j8}q{{9=;FfwMq)S5MT+idiJj162bcp;hjqK#2gJDzEpYY2n54|8xrq#-5os6z3Q z&jouf_aDXQ_r3RQB-R;2>4+YM`sC5o{O?ndL|Pl^6TAAO_OU+V+gFcsYV4V+Kri!* z9MLNZ4OP`v1OG0ZgI-G#n4wn;>XN2ESoUGP4wswTvc@wpcrveQio$v{vxth0va6PX zF+@gaqSp`&DsevpU+zL_|IH@QyRW6`mh3i{qFi%6_yP&(ikgo%0dKMUi7k^uaonTC4bu>~MdD3tiNO26^mGwI^Y!S}K zXRK<+6};t1j9IALpyB{>>pRLb`VblZdfYd87T${0?bz;J zpjVKGxyCqtemgG0(ZV8s8F}f>3_uGyiDB;VC14nG?SN}+zhoO*mfyPg_!){tpzY0& zxr@mV-boLnGPl0_^iG>?j$lP@MG(fm){X<9g9zWyf4vZX&1o18(2GZdo1ix|^=+o! zB`<{skA|uQ?FC9u$XVfb%MSKdNwAGLYSgZ;@l4jB41Nc@m&1i^@Z;9?>z71FH0Gu0 zFrVSEY++urZiQ0fq-+k3!F^E<(0R&^TwqctX_b|kCGaOY9yQFtAZ4JBEE4&BqXgBP z3WL**EJEQV-rmJ!SAksK{Nw>kUuj>*DxhKc`;RV?h=Zq3Ea}BD9BSNQ(WMuH64=Cfn$utDO1pd$t}2_ z&wu>)0?McAf}!+(WTo~fUOMnI5&+ECZ~l(6*h{~lE6P!?`;CNq1)2iUQ3Q1GN0+tG zZB3XSFf^SibOz+NIvEF9k7etxcc|%ka=odWEi1ai0LMo%8=9HNYDu(tc{TnT!5fk*boZ$6y-yVSD!sMCBb^J4K333hw z(cgHgLo#A;{0E}^&_5snI@2Z5ciLHrXfT&|w6)M0OW|AQ9`=Q7AE;U(=%S$P77%!} z85ON)*1DFWb5n;Cxg#dHv7Pzt^D4}0#&dNIje|}}(>>W84rVv*<9T`DIc4-$G(XeOe#a%ro{w74C(}!_tFw1|#1S0YQ?TyTiiMW3DIT~+9 zsiv^?3SaiG0CWN1yP{AD=rxdYV^!@{0dw_`@2kr#P-i((UMIDJPcXDVU;D}HRQdfH zC@^J&Ta-6sUTx!DRIk{U8K2IWZFY$l77IG+H~`%TR|lc4c|fFME@O zlDtvu>N4=7(DgiJuDOq6MVK;ypP8pTZ+(+)2&_=YPGPHb!=^%h(IVhkN(JjI-;W3_ zDR`@Fu6{4)Vqe~RMhu*z`>!FJ+J~LVf2BBIT+p8LJ0Us*dBP;NfqSzpJKPsN5?N3v z_^G%WdnaT9r{oBO5VR@JXt896&H9=2pYXZ~6NWX3W1xGEr$1Z`{3AbKGX$0qdfs}D z)o`Yp+cRI0+NqM0Dj*1+)+gT!hxcyZz!9ryC-5w1$@!@6QEygPM@NKoYRZ(qNfeSW z&ibCKAgNt}7m-JboTmo8*IHRJ5(#cP+Hn$+vZQ1go`cyG6zJF%IiI=_GSKXaOJ~_J zKa>*dh7D?xl^RM71D-4)OVpVQ_OmW4jok|98g=eKO_8i+&KkmdNSLCo0k%4Fj`$ow zFoeVX*38BC*Skni_}#ob7`;^`9v=wCHKn9t@52m2!JHm!D0kJvO8S$9&B3%N{0Ctglc>-BpsK8x+bRa~k z6s@nTr)O7wD9TO(*O_2W?75ZLBE=tSBDiQ6?$$ktiyEgAc#oynIIphY#B>&=SH9`zg3?(lz$;`dVm~8(qE&?eYLwYlb;#M*Yo& zLo4dBr!nwF-kslVB{0|~nMHwhcQT7)a3^~5&b@@ZXN96ax~nnpyM(}7O4GN7<1O!t zJd$s)Z;%}vGMm-v!sOrX=m|nOI7rz*t$KJSI^i6)+eER3rB$9 zTvyFHivt_?5bKaELck`EP+!E!z;Wv9RPWB^GjqhT{-1M=3U3i{1_<)ohRNCqmQh~73v{|0c?wh3lZXvY~wm_va^ zMK2T@T+q9-)4b4-|34z;T^yV~(dO+?ej&WDC}N}X)M=WAZa)FR2(2c6J z|J}3f4}F&%Trng%Y9@L}hVH~or~s@$rNi4;QNH((*W2ikcqWoCiWr|u@84@-V#1ez ziHCVkk}?>H118Zxgo*nYokJn9wp!88Xjk?>e7WTyn0FJVNEZ)M)v?U3QAc>H!&$ClWi1>>VmCiW5{@GuaxY!J z4ojkxro5wt@z)xX;KO0H4B1wNB^V;luUgG)DOC>mz{cN2s^C}=B`Egyd<~vW&S=b^ z-rfMo&ON^K*!`b#`w+6MTAc2Owdl8UZgm^4863W-vl;JyPy53lJN_EOz$f4y;o31q zv0mKqyp+74f@NN(W_Bk0Q*epqy5aa-HnR6VrWZi8Tk{rx5z}G3L%W<}Q}Bh6!inEN z9})~=hWOLugp`oqsX{hZmGlYrcHZePCRC48<21qAi*B&%;(N$~+_+=bNcLlwjb*ir)~z#1R>}t$J2G>^P$Q|3KsLeGok~MnqL^gJ9+YP9n3@s7|4}o-BtGe zq_WQlbDMq$1*f-Ln=z;YZgEUN9p5FA;vw)3SO{DH3o>a@ulNIOeIPE5S0y-%Hutbw#iO;_GGha`@x`j<@(vV=4C9jJYfc( z?!u?I>;y&b-W4lWKv%iYt|@AAxO90+o0E3ijh`UWOd4lL%9pSuThV_hbNOugpY=i_ z$gN#fXQ{Ybc^?r*I7s>#>j-nR!h%&_seP??T@&GLQf+EoQL|>Q+6-*Z@aF*EMzw`*Lan{NH^Ck}`X~oo>?8R_Wb%gR&%l`MU>mo(`EtTV7qzzr32zI>%Mw(l?u^j<5OO`n4h zcu_XMNvm1`FX*r9cr`~UY}lUZng#7R`M6N-s8Sd?apQg z%2A(x5VWvX2=s%H5X>U+LtSV@IKt}N4+dcQRjy(I$$`1{G|U=k>q8km;*8EMa|Eq= ziQDNBHLbZ@)l)Y%htWv(Y>q)cy_t__xDD8U!MXm|<#00x_Gu~XZpRfrM*hk829~7b zZ(LQ^QauQ)bMU&n>Zm8nAb`!8Rid6*z{R|EWng#jIRMs?B0j|KFcdhz4jM`+4` z=7>>HjI~RWW`A0{XXg&sE4^gUOBRLIosDa1Dk#_SUB*fb_}0NWhB{~UUvsZ&9t&=a z0OGg7ce@Ul7^>vCcW((j_zR1k7MwTOJY$aIf)doJULB7lBJl}ElJ;m0v?6^+enkOp zyh|76seFQH)?^DKvKU=gGp$U~mo3eA!rA)Bq3>JUkE}$qzONJqqJ>7j+>0LY6fW+` zI#X*$P)uH{#c+Q4M$x5X0bBQ20BZQ}@e893=&F)PFu5tMBm0HR9)W?Cuk+bH_EJ{Q zsb%nMo6=6u>`BN1Bi#IUPDYu6m&Mk)kkdxte^N08hIyw11}l5xBY6vm56$a8z`mTD zw=!T^*!VLv{u)d73$HL}7=a9EA?!|N5yp`BGv?95Elr!vS298-NG@M+qlv~-At{J| zG9HH%?;ZA@Yf8;Vzz_b+3aftw1`)$}ibWH=@%4Ls>!zZe@+Wt4viLZ`PI>P#wdSfS zJPj0gCl;jUFK0$OR?Sn^2?k-&%F3)F!;r(U+Li3EW{jb8vS3xk9m0)P?Ad1Te(YoV z#Mz=4`dGNv=fBd59_9HLK`zl0n>>#I)0>Je{M`1eyITu93Qp%a;Y_mhVqG%Nnk0xr z7U=fd^x?`q?#gSq@lj7&El2kW{GPaHqoYT(WzE)b2+z^A4+_|AgC8FqXkjkv&YEwz z3lD)8rA?`k0nZ}boz^}L_(Eww##F!i@PPqCJ@oTXkD^Xb=1lWrNp6XNM?0bBMvl5u z2sl3=tDj8AiLg?OiCj}7*orEfn6U&oGkPY+)! z=6M8pz-g>o_bnhrFhaONi}}+%>Z%s36ZhR;P*|vvB&3*AI+B)WZX$XxsEl=DKP|k7 zg^K#u4DOX5eAYw42>)5;{!NKO{?e8(JvY}!qK?slf2qw`JHRh3IXuns_HDSl*lUV? z7|c;RV~McWeNr;9D>JLB#3l)NRB;&-^AuRbuDQouNeEoaK3#0_f1Gm_M42l2Ck_Z< zv|t(>&mumukh1Nj5+tm3LX6ewN9{;OZ3p=__K z^echi3FPHp4QI{qi8@@g@dmK`n@S7-Z1omgN{Wzfk%`{!SiSik$$md378KX)l~}0q z4k8D90o}V9pH-g413kXLpEhJGr%&O=d+gKmS2bf}0F$2PrdujB-*7^GC)#G~G&b5e zYJ+x75iahtg`?!K9utjonb41`ZBCWAU@@zu?SM%Dp&WdPjGN+Q5#Vj~h4nP8#A4m3 z*8avb<(ju_dEYuw6?FJP-g>3u1q_oo#-5uoHope;QzUx5I)Gm*yw_BD=)W1Olr}tE zmQH-sUr*>8mmarInMh|9-CxaQUdW(pBz}H&^@1iShJ+t0OKkLAdGMCyFNHOg!A(<% zy;--?Zo~bUN(H{Zi1sc))SY~sXp{MIoN5b4B{%jbBMmmss5m{4m(n+ST^tm)+N~M9 zh1}Mq54qM3G$b}duR2;-CH>zuhS_Z~pPI49mcf#kF;cJ)- z2xG63hk4%CN75&G z-m5p~C>}bs7+gk#uNF(#pE%;Qw?+jYZKqtO?cl^NDbM@!+7#POP;&J>0N9nHPhZ4s zCaHH@P$mIPdzU~Kv3_5-$_bOrh7P@m?kR$c0QruvtAzzZ?VIq9VeYV47KSCFzTyMw zjGtj62v&2@^imf7BKeE*q+^9TVXL;lzP&^)^d?%k!zrq!=4np%ntDCP-~s{u6WF@e|giHhP6B%=c%ImA2vKaaJA@T z4D!=!jSY2|@nlKMBL>WWyL~W1;M*|~z4ObHqx`EY ziKiFqbvjF2|5JWyUI}(YR4#MY)>c0bmrni!IptUE;o<>H!Zyi*4ZkH2ANf7}yN(mf z{5GECrchBmU@HKz1~TBwU24h_va6fZi2(l9{x>dO=TUG|D{$D~mhE>3`K5xpYKc2* zQvP&7uWmOfE`A+}$VIG_0r*!ZxA?m$Flo04S92SyU zb3EkZktqq&hJ{<0oHv&Ww+Ka6<@vZ9>1p4wLLgm%S+yl#_m#o1Mpqnxq$0nW^}mM! zV6PGFvn2q9@8OOH(6YX>XB+I0mAgY&4seI;XOn2}`KG)Q*Qg^vR0LrEPEK%nPx!f* z<~qiGdl2@@i*INtZrQ>6W^~o{1u5@MJ{z&KZW#C}MoMMLSh6!S6e_n=vQ-R;sarKkjBK;mD%G?o zZqc->RC7y3DHmEMSte~r8l@VACS+%R*ZusS=lK57arnD~^E%JZ=ly=YLMC3S$U7N2 z!N!;L?O%@Q*BTQYHxzX1VRxAUonS;R)(FGbl`7ui;Af`gpMlc8Dad6bWSJeE7bjSr z9gQQdDT6OksN8&~X#*v>V|5$xAHUFPe zRg1X4%-q4p8{b9WdiC}#uI%WXVLD7j0K!2}f$sO?eUlD|tKH|bCO68w@+B+nUO1%_ zzWPTv{NnJdO#sF`M1!{()KWz((opQ@h5YAEjAGr2_NY#=ZDa(QLc7~)GE#VC48MIo z$W8t6w<0n_j>>G~Lu)L7+giaJg5s(%9#LrCnC^tvk5F5BD2ns5AJ~JMcm_Ohp6baM z5FOH7V+reAtl>lZXJaP7?$=X4zmru>OM@VW5q9ayBA4bt*<5b1#(Yr?RO4{i)Rz7S(b6B*?{i_k8z=8z zf3a=9t{JvfYu}P)TVn+h^4Go0UZ>FA)qti!QJra#C=D9X+ z@vW-YjlJ(+MkJX1gs!oEy)n;oul#WQOToNd0P)-IBEzET=;Zpo7bbu#;4f^{?amjngSAQh_FV2M5$eq~=w<}4>kQf? zm^gF^yxj(_SmP>KJI$Iy-6ml_j$+PE^y11o+Fp>{rZtmH-((@{pkIkS`9$! zUHKroTd`{+!ywb1-&%;?-^03Zl%B5E*b$L#LFw|{CRt7ycYY(Az5DcoL zNv1BMv(?zH5Lm;w4|{hzYmBcPhjouw!%h=althB;IGp z)`aC~+@P8jdafi7SbBFz0Hrp=OVQJD4n7&eB1T&%hduR_gD7b|Mr8@G%@I(m$d-Y1 z8WW#MW})@%J5cY)`vJ}yea9KXHKpKv=S)sHssy`r7mzrjqyc{%%FmwlpqI`4c+dDYrMC{q&NtvWC$OkCg8WY|H^9?fjv7)lmhAyg}tm#J8^mBbA{QJ+Nz0isl zVccX*bu}dt6^i1={ob2%ZxL7fj1g}sOl0yk ztouB=7`c)^Bv_tgjh#;sA9pXN|B-ffsr~P~lsP;@W@YYoWHDK<0(p7+pRhCeHTvKD zIuac6kwe>@7=z5*ajV&Jw33|e)SUOO@=gTjO>?|tDyTWB;bw5ucwBv6G+)`Pb%&~F zA&Z`+Uh@&!%&;?or#2OjF~#7|Cyk^3`Dz2%$#c)`xF`p$j|?eKw7-ZoCU|3i{$@4* z@-neY^DNDizPC>R78!;e5dA*h2Y#E}uYiS!R)2Vb$y2ll(kUr4;Esq^k9JOZ#ncvd%!Y!M!~n>Y0S4 zwl=Z68BDb<*@XrEID0Gn4sKP+jT?w7VwTcaXcbBs7#u|6;j>NL&&`wz&B=QcV}R27 zMavh}tG;|fZUX}OfN=#ph}mP%!A$7~M-E;p$AFx*aLzt`14sU5;_@h$Hn>UCSORS= zftp`_^2);PJ~Gutvsm1u`tvegUb#teXql5jPmo2ZLk9m*cbf=Xj^W%MA+t$mcqF0& zaTNDB)MiX;R2zD0hs9|*q+=o}_#c-Hqi6m*fGfzjg;QC3NtxTS z^>!k|KL1s?;(wvgVaeT1a09U__z>0QLKEbn)Y?#kBo)L0ge@?;U0%6HZn_M4Ngi45 zze>Y(pMp{Kg?vNXtk6jIw|pNS88&w)5Oem|O$36r;k{s;q*5(^Lh!*%sO%ldUTYC# z`V{N5G*f_EF~A~tE}^RkoU}!C&1qof}tbWn>0Sb zlc|~Fi<8Z25Q4rpoc=7Fp%J$19wW8AO}hBv%&0a{dY`sz@l$?}hCXD1$5-4$R-=;+ zy*}R`1826Yu~!bByxK;e0V4l^hD>yeX*$NqlnJ^@k}#2b5&HZE?{osg?4b_~hIPYt z9GH;Sk!RFiZD8x82|X91C(r6hTN)77FkqLC+{)~`g+blV^Esa##-nQ#(Ro1%Y)qm6ydJ84r?tw{x{Fz6k zO98Q6>yFOK#vhA{!jTL6I;qN+w7CNy$Zpe|>~o1dd?mvCHI@zq!rMdaTIX zeC|D;jp27fMje97SZ%6aoeX42rFk`HGw7+n*i_$D2g06RE?>c`6(q@t~FjF`cjQ-TFUe&axF? z&znWGMTAHV?1TL|6qjlBWMjPQhu|DMh*o?Zho!;btpM=uxEDYs$D&L_UZRYHfzrkG zFP=UFA}(Wh`grkX_yV#ES8M0AkaQvzyZkM>^eH;h6}x2_-p#=9)VU7V4mfX}$W5hq zds$kGvb17?Y3eya=#4q(*RMR1CY|1}Ck?m^$}Kl*&uKnr(01YdMg-;!BFGm0zJB$~ ze1~$&d^?ZSDcpcM6dr_b^KZ}wZrV_G&#(D-{D0j_1x1Kk3E&%bxL}WPyh-wHXxnp; zNh4Ht5<+Hwr$<>k-Ekf5sq#+#g$oS|v_WN+={vJ{zU>z^RHiF%e8z^be78*!&p=6& z_8S90w@3_56;aqC3~g_a52c%r4(Xve1+*{<7MJGhq9xu4L<-t;Nb*dpPobBeMmut? zPVta!R`{KP>%(FE2~Hxwv>NyTjyYDTa7WrJ>3qnWNyPXn>un^@uwd*tD;dFpa~^5u z?uupun+zFQ>G29|uAS2I%qtK7N7@RE=`-_%mf4Ayshr%&|74l-(lZr&q7GQ@{WSjK zBB}Y9Mh74?4%48tqXx&Pv0Gdl@Yic8w0@|n`K!BXL5hm66GRB^6b+-zM*O}Qt-yEz zw@K;K!&s1WZwhJiBhsGG?rYb}?fsF@@KVH~g!ZaMxLmioQ>Qa|rT?l>ycV5vGzQ3t zn}fIuG*0yleaygn^!`Isri8O;|04DV{*92VdMBUkvh*e1cq>2zV7DCg94j=@j(Pf4gWFSC>9(-vn3{^5{e)@ZCwcpKid!a+#XC{9dRCf9QG~Gg1zVgPSZ?cR zBhjMAbVMsw^bx7J?stpcz0!Gv+CISWCno0U*StPBfGcv5S%*Qoan2PN^Sk>+#fJyH zVjn6*uM5OSv9jew?yPULhm_=JsLBlb{rVp(5wvDB_OL_jxV>4Ub{rf6})JiA)m~93O;aWX9{cj8C`tc08eWVaZ6qerAE}6?}X1@ zOB`ln?TuU$#IN<58M2+PK4zb#%0I4b2ADBP1fJeZ3lhYcpfc=c@~)gIbx-EsR&1lq zKXpdep&K-nKZmxsLJv$Q`&KvC=OOYk2U*igdpxSmeBSX>$dFgMSP<&Pc)Hhsy?ZYS zdGASrqs>q_Jw<>Q?~es{)sJ6MS%L#~{P_0_a8EDlwhSbB)Iw#c!@YmfRIW?&$i}g9 z2S?!kTb|&C1cQJyAES~_2tMw@u~=S;d(1#wh=RS81Ao?6NtJ2v=1o;^-clYT^wVU0 zX*9mJ_q)4Do10^(bVBJVR%ELwodSn&wcrN1Ll8PS8x4Gn12p%kHi_WXU{KI3w(Pj- z%QRVW9TTED9U>0_>TTqRy(ljT5u0F3s$+!r+%v)Z zvHX|mis(bf&efvs->7lvH1P1)Ww1O78Eqf{QQ zM5D5AlF@f6PJY2$bvH{<%=M49Kzq0x(dTtl0jjF~PcAINO;l#d77@(B*emBK4@NaU z>vQXhDTxgX3zEO22L^&IgiOQ{+0VwU0%t};NY`VJus7Bv8gPmQ@^ zA@=hUl_p@3pCPH&=;*(x*bhi>I4vz+GZ?#^qc`;O*d8Q+MP?Q%I9*o)@%)Aj3#v1) zNfCCUR8sqUK99dxDGi9CQgfr^&lV+K zHFf%_RVJ94K7&f-0_{OLq)a;r=|@8|^9pObC6duC_Wl(n=swa-5g{?6(!Yuh1VwK1 zb^90LML&s-DDVe0q(==ai>0kJopyp(BJcd+iyw&gCn>w08C=12CdA%fSfVjMuO;1l zn%Zf~ZOQHTX zk(=<}^Ev!9eeN^$(ALkSmhDWmCTzp|Byjj4d2zAx&Ud;3Z4Wn27YQ6jN|Fa+g4TzE zQ6I-gI~@pLuZ8a*+%99pvZuz5^cpEK8SIjiCSl()(x>O~?vR}uZ57DZZ+2QSW|nk+ zsWQk*u338q9$YU8pPXi9@f*JOTudX_mem2Liw6|Ri^{*Kd(Bm2rfj1#`aE;3CHh=C z;PO+AEP-(HvP}6JRl3s!Y|}i@n(+tUAcLUzv_-ZTH!2 z2<+N8OWtwEp3Vp{sDs0*1BKnX{&%$_oad^Ev#)nxD5X4wC=3Bgx1APiXi34Sw7$76PkT zHm0tB`9p2TCr?6pOi8O7Cs;2jZ^Z!3Ge|(_1lxc;E)A9m{!g3ngZ}2X($R1KNYgg5 z9Lnoh@5g3ECf}gqW#~eoq;*9sl~yIk>g6leM{%+U-NjHPE60wLwV?bY@uqq24Kh=t zNwX7gW*-TEaw0%>9Tf(CR%dls3e;R@pRt#7pe-U?c&Au=hB=;yy1$m$N&$ADP50wH z7aJxYp>gPfgBtztQUwiFex9fqwVeIMG-=Ni$NO?5o`3r1VQ~DV;MRGtSo4R9ZZ{hb zl$K9x@@z~daGDBK!l%ambOu~+qCt1w*xC&Tm|o^GUjG9x`RT4#c@1r zH;HDpya{lF6icLLH!ohpbt7va|0u8VTOph|IIBv++DxTduO`& zhr>5~NFzEGcL+aMF8sOOyQClYqTcO3^4WGn1WEM+qJ!IhN*kUqznT3o_kV=cokQ&5 zCS%`Ao$;}C<|)gghy31&x;y>!5Y>rQ0EIHoO4Hz#+fSNTLJ(#v0=ub1q;?_fAFOC> zKV~+bxjgjMN9(S#MG5a9vv#cNM&Uv-)Ngf^_5jkA|(wUljiCnIh_Kcrn)Nk~Z zj5U>QO*4?8zFuBMxX)kP#(M83Qav5f=Neu_d#L+}-05~J#TpBrZ9cibK4sebqki>f zO)dCWmuBg7qW68t8A2W7(KhziZ>XrfQ$*fIU(h5w+^O<7hpe@6fCP1NxO$<5SXg3ZgH@|S%3gd#292fEKl9L_TbtKY*@ILE(R zamIic?5RaZJk|WC$j-?LZR$921c?Q#BA$w4mCixqRN?*kkDyz=U(mN=fVot#rChF>kee^@MtEq1%{r z4arwzbcX3Lr&dEzk>teDEG1_NZ|MRLd_B;)1RL8(>IPpGNYOf%OpQOO>)%HStYTHCBf-%VJ67O= zy0H77)McWEv@pwyb6c9~GDc3b0wc==8nx%NE9W!O>4AWZD4(}j$@S2Z4nw6ENQO7# zV}v(j1h)T0Vmu}r!;=jX zLhWnQq#L3`Cvc6we!;pZcv>9wIP)d_6v~#n!wb@fc(&iqovY*D5KaiLx@E=iptJok zSX0^4#zwLiU4+C-E`f1Dkw@IQ4HNFB{zi%2GFr zOGlk`lI|JRY}ELfUhftvEA@&^p_{eDnWscVPl><2a^H=_><=IzzG7k}c@gesl6fB1 z$;mpP{xaD-0ZWMm48JAEx{7P0UuWr$Xw&Suxa>1)^Aj~g&Yk~o%=lhGLC1YfxS>Sj zOw8Ms_!J$EiEt9R{%V*c}4HQ?lug&tQ5N%^QF2||(&G`JRtzv6V8 zVL`_yxG^X*U5)ivH3spX0)3>7it7M-bzTusO?IL#042DkHjH5kQjz$^eH^#I+d>NTp; z3RO!)CprLD6T>J|#n?geFF(J8Yp2Zx2Zg%T*<`&dXf&E2GZ}Vdtltn+(Yvl9TbVPw(whEOKq*<{K}v%H1U$quzonPogmqMRT55@p9tM> z|Ll|J&o3q*oCX!k4qNgyuMoMf69bSD%oNgO_lQxO-NZ9Z0p>5fU377d-!B9E^DWoS zOQ1^aIL3ji`5IlWNFYEh`e_)4>wp1&+j~b%tfLzH>QgCU&*6cb7mW?zw;jIz(e-@O zKw0Sqi%TSj#CUR?elw|$WRbXAkb}+7-Cq$s=iRnRmTdNL-nT5@ORb&=%DMX`#>5|0 zOx}D2X&YE~ziK3R5|Q@78+Zoi02bpqa}xBL)3uKn2g>#y8_iIDQEo2@-x7y7oo70lP7}`tb*Uwq9vb9{3W_-e7Vb{q7Sg;AD_`^d~LMuAMUEw7^ zMfZsO&x2EUZy=Bo=%*m0^m_Sqq|9|g50yN?%EJqvob${ec^R=ZdD8P&axEG!UTs5g zLz^h4`X(v2KJjEKa_xJyQ8j^ID3I9TX-6xTZg{3fP_g~E#`ADFFED}+DUVyu=yR?H413A6P0cRESH)&%ofNmXRFVrU59TxpfKN$3tG^6mn3Td$N5^D zDZqnLAb3LPcUrJ~7IfDwnYTeHL^?^6Q1Ee~=FXrZ_?8idYWot|nCw_O6VKlQf!8s# zcoV)~dND2UF~1p$v~wE4V6$V%hSyF;v!+XP_<3_G^lkaU{DRnOwaO0E`m!gtsCp&N zeA_m9$fnoq>WrUmqC>(3jnl`XkVw<>aN%=~f!X~K{?MPC6$<7KqWuT*UUSY34fA$3 z0Jb;JE59?gHwoZhzx?ZY${tEjEw2@BX=_s{es9Z-hkZsJ_a_-FC|rP;H}bHV8R~yn z#=N=48_qs^R>AIy-oF|aUQm#JB8*D-&R^#kS=hW!X_7h?FFl$Lw5&7@L4Sjj1D*D8 z-aD!95c7Nqc!Mf-FHo991f`;oMZT%UrSRy{R{I0rjXGPTTy&1Rze#0e(WB-H)sgjv8$lZk7x5`yA`@-=xNS8wRlgssE8< z^%J`n-taq?7VCWBA+qF0zVAE5vsyYn>)dJ1qIPuRjQQ2g7S=Z`*+VQRtwp(BV&qVg zdZ2ZnttjQUfoAs37>uzsQZGf1>xSLq-wPDpQhvBoQu}p|z=1oSoI)jiz>~S|U&xA@ zh0c4rV`-RRffX(ic$p}d)Ly%`jQjMpU#=g#2|ROa3sMj;1+@Obpx@rCLoil?u1pDO zg>;dH*R0mRuK- z$hCWCajGA1C|rWc6nwZmJbVb56}U@1uv^XW*B?IR|G_VTI9Rm#gdtp)WkAWs=J4a? z`Sx3ClX6(Wh@Iz8$+(I%8O7;@4sA|OcA6ksNye;{L2#D*!$szGTzJF`PFy zD@q!ukEif&je$rqghW(v*gWA<&Bu@L37OUXu(h% zc7-+b&SgalsIGUH7%<=e6d2x;lrea1^Hp=f@-myCdfW!`gEZarI!mz6ac4(@r9=86 zYN9_?>E_%~c0g8{Aa0}G8CMls#sxuV=cVsA^FK{-Sx9h~XonO#&}X)@qd^3DZ$;ro zlPkwtUYJhat;$^{0v@W5*#G@h+qDM z0*5xh4b<*@Oqa%%2w3&&JylgNlAsFD)u};u2Tk}gkL-KW=CroI|Jv6P( z8=N}TM;ZE)g1+o|J*U92)j~ zeu#yT6LwYm-eTaL9gaBGfM962+p>cnMwIjhP(Zf7t6e$RfnWsp_Pyf9JGhRHv&+cuF`kI>A(IO>5Sv*(lmazYTOhqQe{Ev!xUA<^A# z#wCGKUzO0NV9uO4Mn~=|f`cMXkvn_p_-oVy#__ieZ_M(RS4@&v>Wq>l zFTARsumg&vBI8LqbXj-wsHg0xTCQs?9U~x_rKqs(dfZ>^Io7=opPp-_C(flQn2t(G zkpH8nPo#T3W#V?C<(g=@X_}lrab-nGzP;faJ6vfrdP6gD%QXa2llaU1OFYh8XPatj zt^A-mYYqV>XeCf*K@&cdU^@#Y^H}>IRad*Hm>tN@uW+4Y``p>AVhWFcUaj7)9i#&(095|1eRtI~O>PkP{SkGdPo> zneY12jpX2$4NtfuO*WD=0>vw1;yHJ+X%q6E@s_8q>+bf3Zvd$V)iphI{yhU>NVTx* zyyUX_Q&t9aj)MJ1dumcA>6y09#0)wp0##Gm|0{~SS^Ldzs77SMo1m6^Y9%^D?hx;? zJ|}1J_NM?sLWS7E-NA(n-^17m_S~F;7Jz>hu}GD3BM>7B+qsSu$+Sj#9VHA2j)o52 zKW0lf0Z(6vs^xhu8h(W&M)8uHObL!gCL_1C?{1&?rNW9=IT^0k!#TWA~xJi_<4H zuH9)VxJN`gl?$vY#Elwp%Maw~>)A?O@?Ld}HVmM0mJFArg}Dh|(I2vR9HQ*dMOiOr z_i9~?{@mZ_%|udqa<@~)~O#p45Z%T^;AdtMOb34VvUAcQ0AIuHQYualRh$#<>} zDw!8Nk@vI5$j}V7KIt_E%=P9ia>eMCe#dYzN=|065+V$RTTn` zuDG2&%r$hphP_TE$BAAiye*GI-%W|0UQ03XCDY>mw;IU#pM@W_js}*$o*~zEADZWK zfm~jJ;(NOcRdRi2@%%A>NAF5yi8IgP&La zF^flaxpCkas>+&N>y|U`gxAVdPXsB-#~2d(U%_B6I&uX3!4|X|BuH_=*v5MgB`H>O z<|_tzhk!%B(eV~uS*BZ$`n`0V8EUcmk0V0o4)3)?j7AT-vt~}Qwrn`fTD4xo<>kdD z6}9@1&xU}ry`3*ZMP61K8i(op-TwkBu6zQFR1Cq9w`Bj#tG!U`+D@N1jdcnxhQHj9 zu>996Ogi@nzULVj_1k%52FwhsOGgh8gkxX_A`$CS;7PhpUSMz?Cp;E zxzQG?rmKiH9UEu;vL^Z)EhUx)HmVK8?jmX6yhLbz%{I)Pl6lv@kYXB}uthHUxy4$Q zM)%Us2~c~z2o-no&So9g(Wu-UZQ@t7mA;SZh(HG1&HiZhebX;;m%HzxBU!+rNwqk{ z3)#MYG0)R)&g?@v!-4_lqLNpC1QW8|xjA5^L1m3HGw+&@lm0gEmV zWeLw6secld*E=M-%3ge>>pD!DOjE!pciuEmo`H*4G^`btsRiCXfc@A)w%h{`x+xH@ z{jhe`0@Fpfh_8^L1o|2;m!Qh;5U;nftO8wGH^%sRSYe!EQ}A29!=GAscIth-X!aBT zK9N71GoLFqcr&~WS7rkkRYAMRY;^0CT0MQTm&|>O;)FyZg=2z)s+;1g=tS2E;u2Me zD;dbr!G}s-tJNDS`XjNRt#$=A`oBIy@()y zzog25c5`jev~JP`P1zpV<^trA02DDd)0l%@YVnI@vTWU0drils=*O!SjJ_+DLEVfr z-1NU&vQ-x}lKau#WWVCWIF{53l2 z5Bh-}P)>H-pc(#6qw^El%^2rcLXPlyiisFgQ#XVOwYKsula^hMo~~q?Hz_X9z(Tz@ zzw`P*q&Dj-HhZbku7_?EF^8~&<1zdpFs}w%%h0NJ1F9YYyxj{yjxRasfb|4(6;3v$ zA&!(O@D8;Onr^nJOZthG&Y(}k&iO$rbbNe#zT~%Exwd160s)2b0is7svBMculA(u3 z$Xw&C)3KOeFQ>^-iJERM`6p3HEo5_gi*#=yeFhb^LZiRI$MA&s#(w77nMlz6q_t$9 zC4cpwk*m%GG~Ad^({(amNHRDt(kA5ZG(KA;dAUj<0)w8tzIt)(u(Ftcca&(5%|GHF z5pF_A}$6F!1j}!^4 zYrySSeZ91p(i-(xGo|Egfd}XSIe^N?yW~XOEPftNQ#E2=n?6Ev0aT|JF)Fsyoal8| z(GajCque^XFp4H(f*6|NBHRhEumw@N3=g7YA}sBXtkeqW4!R)xz8eg-2{IhSZ@#Me z?x1jgf!YT#ew)N4OtF(;WQma6@TQT|AweHdoWC)B%ux>Qb5G3EP359%?m#180O6xr zX5v<4f}{(KWxZgc`2$boP`vj)EqPC&YGa?xD}a6a%>i+jinEeZ;Lr1-AOpQjDP1tB z^DVQl+UKZ)g@uf1U3mZr5JZa-oUAj#a|YDB!pGNZyHW_AfaT}v&TO+=R0*| zpM9pjcv+*!xOp9YA3M3e-8|8_ejxAi-h>-E;*X*PsInwF_4Dx8weZ(LHHAby|IxCc zy>fo;+B3Ee{4UP|c>7d|Q$j3^>s!!A2|o3NGB-2v6xdSSrkeCr73jt3sjS`1#kj4{ zwf=EAexh(2K#bi9hI(dzrnOo-Awd&Y-t1Lg`U1Tr8mPEdud`UPdMOK)srVt%Cq(f@ z7yc^@rQ9m652ZUeNKyB7{ZXOww?ISV5b?99b<^=Pp*W}K{L-&k;-eE;s-85Q$_WT$ zKLk9M0ZBB5iW#Q}ZzDuy0+4s{oc#>u`j_n!FJO$vryn+l0npu?`@w?ij&Ti3`)0&XqToCx*BLXnT z_&>w~y!p#G-yLap-6Eb&2P@#6sxAtuKpIifyWMr`~>wE?<0rE94n6~EXXZtlmVRw zV0?Jj(`F==)Qba4Bw=P;(`{4LOGizP@g7A>f4k z^YcwQ;gvFGEi&Wk0?L0(i0PoI_(@YkEBv(e3GMdMr>ZZ`eZCqp9O$oVY(37m*v|2= zr%P_*`FpZZ7E8RmB6DBe1V-0Bz8&?L%|jF=ywv_*R0hSgF8u`!^mq}zeyfP3!TV?A z+@5okSi$r_PWEC%ue)5~`C9Vx2BDz9V01KzvV3c;qa<}uN40x*&_DAqk>S|L2+ah$ z$7$oHLsyQS^Af&x&{Dy{Bn526k<6>2hJ*zH>HC0XN6AFucIHr0z1sCMD8gJ6A zuwHdVZ8liyJ0wH?+kcA9kp2Jmr2(XO(bPPFl4-Ld6-H%>-CcyvBtkjLVQq-=QSWRE} zbn(6Fyqs4^FZshV@oUWo=a@fO2B~*7{5>nDkAHlI+4@nKKu(;w@KATrxSFx^CO^S+ zskLHop%Q_un|}N#i?fSaee%BoQ}uyAhKfmtV+I_JzSvj_Q)juP@NkJ!%%^GcgWdX$ z(IaCY;}yM`n()mCDjdIhc4iK{WtA}Q8J2G{i6DgPPE~ktC39MhYZdSk<)POMwM1tH zEJ%~vX9blMV0m?(${>#1m3hu90~xt}MJHFX*8Wzj!ClkQF#vT6@(`=u4Q?hV?wN4y zeOZWkxbmN03|@()EHX~no+_?U^G~8BX%j4m0eHnFctkiSvikE0-X{&~sG)>W>KxLc zcZ&z)=1IJ)p%A8##*miGhkkY&L802t|zRd6pvpgFkmhtSAHUQ{jF zhlXz;&)2-EX=?Q#uoD!uqm>;1p{TQ;$vX*Jr=27By+P&0tD4dpmZ-T)># zKQZ>5kf16Wa;$rW&Grau;XyX60tPoulPUSYB$zJIQgvg3K*PkYp>;S}|IPed4bCzn zgkIvD#1x?k;y_Ez=K4@Ybfg5OD@V4O#(Fjp8WnwWKq%_e(TOKB0B_yDm#PiG;Q_BI zH>@*;`B}=v?uim0&y1bj9$WYjdM z?_uh7T-7kpQ=YTiAJ_r*=iDR%R|#U8KVX^P!!fccRO+D5EZ@TJxVK%Wu_V-%(h9_1 zC!OM>U5lESJ{N$l8(=1P@3@%6|zK7Jd7+&?1Fzb!2Nln5F6@;`L;NqL1_xVPEtR zv_Co8Br-OYSLXXOw&BTf_b_FtQ`l84-$u7vvZ1_Uk!kCxMfPD~+x8h%m=m=&TU-is zvaV(CMn7E2>n?zXQnpY04?${Sb4b*7UAdS^ax1p zWpn1-%v0b)pbXf>;D;;+Y+`_2yRdgBU0gcPpNvQ#Bp?JFg~lQaUu8NvHt4gyyrn?A z61D59ch~8*vPZH14=QAX@sB_u6?Wp|CX8ddrYQ*A+^%i|Ozy^_KJI{qXo5qT78Cu- z0EPF0V3}b2CwL}+Wtru_7c$(6-G9$4Z7#e%M?dikCS<*NXf`sq(suZdA_!Qh%9m?t z#Xbc%#a#f3p~UX3D!)R(ud; zL3XnOy177$80BM}WTVe3R%a=fI)JfjF|t`n?lPU~ncNPt*Jf08otC2}vFjm@B4hK* zg4z&ne&D>=Hb^n-v{uUpC$}L$q%wn7%cgrCJtXAj;uL|k0)biME(KoA;P{Zw`pUf_ zuYKeSo7<5ONo6M3WqD7iqcjGGY?_#_tyO)VORP@Nc9dXi&Z8>>$Y)#6AAw^3*1iEs z`Zc@yAq1>tRLmqwC|l)D*{?1foHJ7mPwvZ|hN~`IyWFZm$j)~N+-v<&?2A9X8`>%ge9$8OjI1S$;5Mw1fU`CVBB|hbWpH(J8#Z-?@^TU2UC9S zjbw491Qi-|abo058vzGzB1lEx!QZk6`+ph;g+f}|rt>DA^5M)NSK@`}QuDA>WS(@P zk!Vk~IM&^dMgSY>i0Q;Xd=BB`nglQs|f47wyIZ?d0J72tP|98S(}$#--=oS=_f6axDMK#@UyZZC2VFf^~) zM$mFb3|_EwYW^ee#gps<--wAFjUBZ6d=*1!Ne(-E{<*$ARqqy^Vg8fFkdi%36rV-i zt(YTwiXImKTXq-?&7<2RPx3m5kW!)TIH; z&5KyG-+o2a(YaET`xm&?Sy^yO|8^w*_9(btngx#k5_R3^h8@zq&>sRN$!{Otr&8eW z8&S~edWXU00`|i?z+ENL#Zvj-uX>;(b!HUx846Z?6y+5E29|kJ!?@d+Ah}{we)9#c zD{yKY0+ok;j_)zs41UU(YF5n+LO7B_f^tWi3*V3Z;t$@7LSD6P=jvi75cLB>@})O6 zLca`p(0_ObHajSHu0<+A!={O2O<7!#_5mRS1Uc@@l-$3QxixJ#lACy%qWFr6DYUNc zL_b(#6n1P@6xg0&_Qk^B|CR*{|0h5g>6NL9wDMnqG!Pc)yjhJN{0NaFz5TwJ4bBT= zjp8 zlCGn#A=o{f=A1gOA_yovBWcomqY_#FD|8I2H-8MT-!4aGD8kb%d}ZgYnWE^>n@qiZ z4)(M*FG=t~fY>u!nrkN;q)m4UQl1HKp)i{`1o^`)tX_M$tzp3k67w|Ez z=2g)e;TbUg+*jeQ^{8uT=WcNf-f0c_7ECc)fP?95HWNm2Oj<4vm1oj$of&s$0VEJd4`E(5lNXg=7Bsmj5;xtlsY1Rk39Lf_Zo zH!YX{u#k_PN0g;Ph+NqBl~Ptm%k(`VX;(&%HIRC7$SItFI4lzgq` z-M&= zyD+sh{j{k`a#MZoY2&K1R0OfEblM&SMfz*=7OH=pBXpx-qiFtSFcTGu<#*!@ksfRR zs6G#p0xD^+ToYEy2Qww$T;yY3BM`v?YW`?;L{5xQJFaDs|39YQJQ}J${^P$hcNWY> z*0Ie2tTQYlLl*}}~4 zetzfo{eFMvq<=c6Kb&*#eZOC?=kxJ+9C}Q%?gS9;Vly;_+QFx7I}3-J2=>bH_BUFe znF^(5@}BJ7q9+Yy1c^WY^`OWRYWfU?O` z1Fu{p8!^Iv*@U{MJJznnEt|?mC1!W~N^BLx<`(?76#ngU$y!Br5iaqaQib^oVeaGG zM`2W=?A`TELI0N@W+OPUTELRQB71;Tj7by=Yspy&fFVIP6?F9ET{c6&_g)coQXTn> zmm^ul)L0#kgI>kGP{^zczdgiE_~;g*aa5<~dc>jpJn1+f@ z0qlIV1_l)Slz`Wiiw>Ckhl9B!x5r1qf!oP!@E@Vu2i2L$)QRVNJL3^f7_v!86%r!+ zs1Yj&jG^KTH_16Q!PIX&`x`tV{Xj>eZqdr)5yr)dEnV(>VR_w%SKQ8oI$YhOMl28e_-Yr0a&e zbQiT^JVb)|MBDA}|4b56^@1IJ)5-p_QUSn1Xlie_B8uL<;@3XSvG0#-S|BlvjR=SS z^`bL8_RQ2Mz9ogdSNyUc83mSKyOx1>4dz}Kkd5;^#{RYt!&Vg)de-t(ZrnZg=`dV~ z-9i~2xpE6GBy9n284G(=`u1hk6T&F}_<)!G;q^d!wCI<(W6c5QGQ1-2;W=7s0LQ_drls76SEz1aW`^EwZbRENY{wHbi*aZHab385B(-bcML&< z$7If;T64@#uHbjQ=-p2o6dZz*yV{$)|&SHX8Ixr4r6m8h#IJ<~Nc$=>as&yowI}o$f zS5Hqb`+(5@Fmla0?1R@jn?(EE@LWo=egwmFxKQa zJid6$glj3CGTE$XmAy%5%60?(gtLFleU>*Nhi@3;6E6GuoPq?tO%*t^9Ie1dsn4Zf zH4(W}>`Ii5m>4MW$3&&}6U~@Tm(ae)To5M@4Aw0`>OJ0jvF}J0pB{%xzMx)KAGB;t zi#-Wr?YDMfif6-dztaDyb6n_}w3fN)(&kaTcsn;;p1OBtLbYc(ezz~F@g@(uZ3lXj z<{%hj$41#|UqUo8F}~7?3E1~T#_OdKOED1yOoUW3K3grKVcAHYsq{W1lwz_73N7PQ zuZ}auo&R_1mni)wkAlvxgU8Bnop~+)n#4+40ki06R8lSz4`ev57q+Zt8$Oov_4bP^ zO;m^YF8rN7;CXD{GI)E0;2BuH3b>R_(X+}{kK#XE)M%q0uoeuz%1^2k#$chz-^!$= zIB6v!HRf?a*17hep_SPJ4|7hooEHBBc@QOM;#gNLIRezsCh>MeP%w`lU9t*?E8w3{ zlSa89hkfKvbCC3sxkkiunvEr(9gI8Cm*J~zxk_70aAr3v7*q6@o%v}W#iR#OW<3Kw zJEEN3f%t#65g6@qnYq+apyxzBc`d438TdF#$WQY6t+N;m;htY&4R95V6nJ;JPEzpCAYA8ab`z*RkWr@x?~|FkZg)m=dEgd4l|O<8PP?O2E}{Xbz93 z&_a;Z;>ARrh{O|W&ktZR`pzS4?C2 zVzYL@Avgb2@Z3ASWwkF~wpl?_72JNj(*dx)19Qm|eQlJMUZ^!w*Q>=gHFQJYam3zM z!j|O92fL0SCMnl6Bewt4e=-Q4IeffOKVsj!u>@7&2Kio*&7dCkV*S#=3zOB{v2lE0 zM?1d1h;oti1FQd#(D${IJW|nydXVx+K7VRpw84&e`pY6B|GW;v6v0$B0kK)#`?KZ3 z*syPsJrY3wG4ZBQZiSj&0H=q!M#qp^f{_&MG>p79-nt=y#U|)sD8wZk_|%9^9D#3< z_`ac_=SJ$MrsSu<#X;1@;v=}KmtVf`37?To8VDycKvyF6 z{|gTbRng@i(SWW>mRS(KP~jJbf&8{v_-oMlv}UI@e3wZ%J;_b(8HveoMB>C7m?=%r z2{rM&qR82&8EewRZd=c~X6X2XN7m*zxPgXsj826T^PGMgpw|<3aTI%Bow-MVBvx=D zS-Kz@H}pCt_NmhDDbj79W|9{FD{K8jR+iad9>N!kOOf2qNjLa_(8d@(L6o>yT}vXL z3((V7jdAhOTW1KaeC67|i)`XZMN3f@0~iWqX$6^>`TS6;-GhE-|4%A21S5Xy4Cw+Q zCa#snhbgWSk!1xW|FeLfxmnfKeL?{hEO{F(u*_VU%{JXgKe4S_U6mh;SxINABPv8f z{3_&SZ(R3Ars>GRYX3p$Ikp0&SK)q3pjQLE^5h@4FQRlrP~GD|`7dF>;(XOE7-Jul zjr0yJTVStinTD&^_w^+cX`deNt&kHLsi4u@`13OHD!7a zq3(Egn_3=>3O+gJTi`PEli*Ov9>^Fmil5`P0Oe!SffiwHvu}21e4o7JVu6Bg6jUss z>`aKC9@{-w{!EBBb7GAy4IAR)B8t=_*m}B`#J1XXS4fqIn&vTj#rUZ6=(gG*;Vmzg z-fl5}X+?(mBJdIcK#uMx=cb>O*nRRO36cl8t{+0KGshMu;IptpE7B0~+i$ltT+nsm zQC|_efyY7LI;S($UwOrE|UIE(nSlT*Ldw#Ky zd-3e{v#@DvCKCBnr~1J^i?DUb%iWwe;Ko393ad$P?gU9tTXsk)WxmMPW=Qa^lsTP_ ziNVg09G{k+%0kr)(&D-AJ_osJA>4q#CLCEC89mH4$>-U??pqy-&Y8;bYN(2=gWo@s*eWDG@*rD(rTDJ}bhgb?%TjAVMJ0>FlHdrr z%s_jOr0}1dSBIvof~UfmI-|T0d|?UxslyQ8!{@5vrBVDVZOBnB$tT4t6Y2+W-f|+5 zS9rvubuvR@4?c5Q7G&A{nxMMv5{$Z}Aq=x(z8|Mawx9kn!KWA6mX^H(~eT1Tz3I?DszaUtf z$M^W=D@iomZN4%4dIY$R4->>hwFujd0B0$^qHCU1u|tDHoBA;Qd##eJ#3?BQkK(m; zrwiafzd)|WJwfP{yzC3Y1vj&3b~GO<(exNHlP~ID#z$Z@{ED!}s3=v8!vrBM{(E z?hP6`NMamUyn$Q_Z%>d8QSLnw1!s>04%Wd}x5hU$fBEGW?}J4Ke+(+sfIA^Ncx(h; z;Czo($itcQ7BG9R{Gi|vbGT;j9m~*R*sfS%d>oNqy*izK?TzffLCNF|zUdj(8KzV1 zl~=Mh)8!epgWLmysE&W!U!J);kpk3hFNtA^Ob#BnfSLXMqcmO8@|)R=dB{@SmR^mb zygkD^A3me#yjr^(x!s)$$@nyn`Gu)QA2@{0!qcS1CP+KTlF8(PzoAgwCJ2!3boG$@ zoJR_wb7`pQZ%rY}_)og66tnlNXcVu38LlXukXl3Dr_i@~d%y>w@EGt)bnE5Ij7=jy zfEX$!`bsj%na!iwSD@mapA14?20wo;k5fXCp2{W47L5mwF%gdu$b75`Oj$RwEO zk`6ymiv>IO;>a=3tLRxu6!#w5X@Ngp1adq8omh4BkQv;TWc2~de_Ki!b3;tvKi`YD zg-gDEV{@j*R5_=Wx&z_c8!#(vm;;kvo|^v8G*25n^Z(BC5+w?z<$K$SV`}cnEAynG zZza@Nf4U9j0f-iLi?L|L zNdzjJ=ZW(*%R%h0l;trUOfoFc&V68@ZV|zUkd@%P+yZ38)6sEFCZdu&@go^8U%PTM zDsCcusN@#=jZBWW*u=#ytF*@DD2g^@x)0!SPqdvR3;X3Vz_VPQfoC$SXZdfH`1=QC z%sVBheL2OOg}~!?_10yeZ!Cg#42BC9($7SURwnHc9avG+|h9rOYBFjR)tLz3QN*(xS?e# zJQ>B7P;(FK?9+;I;^D2%;9r6g^~C~r1vm_vQqA}17c0QmH|aC_>kprS&v2=Ykv~Ae z=H(_v&k$YEI;Hqkle;A6GH%{{NsL_gl4y6}b6L^##{hn5IjlF^B(zqFSAKWBvy>_h zKk^CXYb`~GKV%y3<-V>0VsXUyCflK!{r>*@*oLQTSkUf|mdx(Lr|(bY)T>^@)wd|_VX(q|PkmG*SQG^Q%{RXH z8EFENeUUj~k>Xau8P63#U8Brti{yglet^MMT>nE0A=G@uo{tePr-lJd9Gn>S6sh=h+p5rO!6ny$CF z<|RNg%dBnIGB9;!aWVZumuY9=);U&mNs};9wc_^Q@uv)2U|O)`m&i?M$V+1gKuQO= z@fwteGVlC>_V$6p##p1`AfdOtXuebUcGn(psEn`fa{&G}aDbh1{LGo6fuCoP_CMLV zVmDS>3yWwg^cKzNbLcc$tTHy<>pohL_k*1iV6~uLcU|6J$Pm8y*TnDwpSl6zGWZ9G zzA(YCPMwib?fHMsplUiM45iL6&8><1b-+z<`(>8wh|v!Yug+m z-x#Eq7>aXED^6gG+QPD5jdPQ?@MBafPiL8{a<{efZ%s)WZc%xr+l@Ge$EaNvdo$zz z1@vfn??D^An!!uT~F!zwY!sT zLW1iOhBd&bYtiM`<4~-$*pv*F(*iBwtxdwYX*q-bDhDDlt%Q`M5J>+S{+OmH?x9?= zncpNvnMrdU!Mc;3z|l|~&P#XIDqXcE$(zGvZ8FwnUbgmNqeATSuk!SnjzxSMx4v20 z#T%0ju}`0M=-458Usfr+D;9wba+J{F7dV(T)bjEWL=l6IUwM{lbKgd*>SNs+%}q+j z6|A9{y`k7w-bduJbF6g%X9qswyKe*QUcQvP0-Q`4oc)WOoTT}YlHhB6)#?*}YpD8e zOOL2`A?$MM)bG!olEJ}Nz^PD1OBHKw36!}9zQvZXvc6FUm-Y(c)HT?mRKH#YgyWs9 za+^zL5CVQM+d>ik<`1PXqg=|~D<8lwhDn1+3TL>x?EKq2q9`?_A@*+Yui&tj_N)Zg z;4yb^XHl|vfvd0I<0u}A2@c7OKEV|a4dln*EAxX_DeW4xl%MQ|vkJ4?+(a_>TKq?v zppF@64iHQSYk=1|#jkiRBn^!r8F!WzX57B9=QYub6eR#09tmGtsqReX-e1ETU2RJ< zqNuiL;D&xK>Rk~($?3>lOBg=-HjwbyE5*k;_=f%r<{_7q7X!f=;NWfbSBfkPJqZN-sV?0>k9FWeof&LA1b zt+iAj9L=EY2nAk!Pe*;U1f1=C{8>`P}G!NzD1f#lt$`{m~=@a<6d#LVg z$pEe@8;ipkJ6Uiu?d>?T@}IX(Y6UhfY>113Yn2hfBhn05YUApfIq+}t1MwuyZSVgs z+nLKSULVjv@mh2On{7Cr-rVLU&+trVl^FY61;(+k=8-Ywe8MAa%h^3tK0_imCpZr1XOE#O_&^}&oVIV%487l`XyvtTttAvz6bL>bN9?Px@+&H`DsJE$z4qzI#6NScy;S*TsnDf@Z$s|e zb+hbR-s>BhplvdXagYyQXSR8>b{%IvcmUxLCDgf_CdY)g!NIF-Af9Y#Z*MQeFP1NG zix-{<0sm9jHo^vR^B%t+IK*<>e`EIKRfeK9q5e>Iz_S*|tRX!^-Xlwg5U1cVbeG_j z4nnr^s{SKNW`E~O-uF_DNdp-itU{C7D^#mg^JR3=iC^wQ4*VFt( z%~$)0`ghB@Qwy2;E07DjpJ=M3|D-bjI}bt5T1XrdDdD?_ermNo)1V5^1( zGdQ8o;2{3tj#*mE`vY!N40c8sefzU;`~-oM|6=0$NoacLIMk+NBuPk-%LSIX z$B%)&dtX4mf5<21EI`o;G3(8UumuPL+V+U4X#Tm)r(eHjK0s4?z!eR0FmIE%7L_Qe z-w`zuAT&qIsRhlqrjc?jGh74OVGbA$y+8SxSo#>zVT?R{3OJ^oQ{fERh{!An@?SAD z(ttbiIg~DE0pl!?j+HbZGo)Nr+AK~t6FWOG-T7JAD+^*y_-m!fXI=o>c{3=rGpN9g z%S=Sg(uEJZvfY2^Tl;{;4u_5g$AA7G3ohLnldBH^qcp59kI3uwi4Dbsa2Y?Hoz3KMp5dxXXVDY}>qQEH@MwMr}`&wD`#k9S`yI zSC-$)?%&vfd2~s+TyxvZDw8mgbqp`9M;}?cFCTgvizK8O1uBVHa9_-O((A^+Q z9lTF#SN<)80e_zC@rS%8u7FVaR?WkqDZ`9!KkR z^ACCW!SA=jugxnq`~w?LuiLI}ufY5+=`M56LHO4WPuQWM*nGd$4##>t^ZVCkJavsj z+_?2DZz@99BDXm15Ll}|a?gq~%3Yv2@_=D81B!ysG08G%anaMfZ-CR^ZlyzZ)}-o_ ziu?Frk=v<`4AN9aJDf#%sP9qp$|CP%6gkd5qqS>R;E3H-3@m&v_t@w!z$*bcpc~d14*zHOLGTTDv|TA35+}oo0aURKN$9iT07hG^$W4e>qu& zCy`I@8>8g9#W{rb64BV2M1t+KK~7iqjjdF6wM-Ojv|>5#(!TFse;~TUe)8YKXCQD) zcx!BN4*Ww})HLA2XF2d{oPqk_TPZxVAP0vhgM>%sosmpSyBU8! z?B5Kc=+kNQK;xWzIw{*ps1vkg$yF#ve%C6XDNz;Kffcfd92_x19Tl-0!E{At+!2oY zH9@M@&y1cSPp;e^jyWk1A}dWane;DxtQua_*+y@I6p}6L};6fvkFFQ073pLAo6dnr>sPBEJJI zO2VL#(Ruu%Y)V{#VwA>LH%^ml)E(FI)690jk~=-#GDFu~z$Y~p6tMMNM0pk*jP{TR z?}&&5@DB64_Q$Tl?w_}0;9lbQ3{!E!Dw-?nOd2xP>%Z%WSw<@E#lv)YL5N$OZ{e! z@Pv*XbqPe;BBpCp5dV>#mw#Xe>DW8v_$j@_kIW#B7&i;!mdTa|U{w1j&oS$Z<3D9AjJCds^)X_3|!4teoH>coj#V`oN@*}EzC(=e({Z9?+r!^F z>klXV-Xw|o@6vH(pZ^-^r4&h*F|kRWihtnQl=`ooZngsb_{sEFyu^H++vAK*y8+BY zY|X<>K0XBlI%5FEWi1kn{8gb0ZSYwn*bUSzIfk-5r{q#b z+tMZDCf31v$;ggg44^8$5==sx)e-p#c@%&N$q}Bk5G#UIZJW;z{U{A^Nb2V0PP9G@ z)`uzA%9URaK_eftU$mHzhZchfeCinW@rX{G7k%*TH#xG6;5D$%Sw}1bxBXeQ182#q zvccH;v0}iF4NCjsp@8QKwyMsD+JzX3x!;vhx0);X*Z4??J2r&t5X-YV75-y)CK*wA z7xLT@1%vFrW2`Kz1O-VyBaf}MEiauJ_cCso~*+8mpHlH)2z^Q#e3E-p3_lL8u}>L_q>(0HNS{7VYtC9*JDg#m}GRS*HSKQ z6=W&K^$VY192(h)&A!d7kBFY;DK5FV>;u>DMou3pr}xB&CNjQiIIa@S!|a-A>8BiG zAOMT`Ox^QDdmy>z$qpr`HFy9*+*95zW@Eu1wx<%x(!5v7mR({b>4O!wGm1aa7xqb% zbYiubMrz&g12jx7P{qaMr2H9K-a=r9tLrBcc_?GSI*$k)Ttx0;*wr$cWwegD{v9jl zXht{Eq&Sq$3fDmWz6M4=3c)58H|s^v%gQS;&XfA_Gc@U^G|930P9b+Qt9s$LEA05W z$>6Y({Ugk;`3%QV{y!~eCMCvAwihUg>_j;q#~^ij9h9=^aw;#TZ05NTbf!o?e-08V z8foCf35OdmTNC-ir<>B}fPhJ9DJ$1gq3+kZ)9~?=MFTJI>-_g`>T2JhA7!bihZB0- zvyF>ej3uMS0m6o<`q>#F_r9F9Ydd@?6qWcF%dw}*xa48*6DUR1rOK(XZ@WvIgj^hK ziiH-Er7LszMd(1F6F!B#H2sA9@D0uWE5&j4C(WmMljJ4ZYuBV3_xLT-mNT9wwbIad z-Kv0wCx8QR5mk3=Kr@yOpBr$qeANSE2PfW_?|%ByQtAH{+<3S{#|)U=N&s21WqA(( z)Uoi7Vo2Kzn#bz!N#|K)P$P=(a!rzNYiJnK1sIkeA~~!fy=H^ETM)b14L=pVU=L(S zO|{)cxp-sEl*ORsqjVnwkBFxV{%NEe&IY#twmJ=r??qQ!%1rpgRJV#c{vLhmfS3GHPge@c2s{6vqivDOZ87jwyCzlZtPitgLEao*4R8G%@gqIt>IQL# zE?*thE}XmKFGqMMiv1T}c65*e)ag&?CX1g*e}1LlR2dB1UWt0fk5@tboe~kSX%c_J z7S_HJ1h=L4_V~jmf<(*Z2jKU(@$onYq&@Q_BbC?*UH3}=_xC7F7+N8w0~Lq}Ws1ZR zY`}BUnp=#^X-lw<$0bgJE`rG+mR|0D-#gX;^>Kv*+R~kCNTiKYz`XKnX8&wP!U!9M z8paqT(MGom@5La_gnQV8i9%*#xp3dVR&fIlY8sH z-X_t(Of&KXUNzN6eM@QC9JQXj=484S%|SnS0DatjP~g6aAc)2PeE!`y1leqx-YeV? zvCBdHk#I;S?gtIAW@!u0BXS&i(o9zeuFyfV=cilxpT#Xt37Yf=X0UIm72GSQD*rIF zTJ>SQaI*)_!QUbKz0i4{V&5VoaK7~;Q>Ny3&0*aJ%eB>LV)uRUJ&T~nAv|mhC4;mD zdKI$=XO~zYoTNo4gWGJOUt6VzZH2K1ff$E}sN$bEy=(25#>eEELA}8+@y}_Vt%kq_ zX};?qg>*t-=nElG%AO@ew?Vr2U0EoHO-ip5!O>c7X$cZEtea8%iztkzXxq}@UtfL; zZ+q9~Pa#xXf4n}&_%7nmX=Q8b8x4@BtG@o+c^r-o+G59Vs1-N zpL~EwJIF|p`2Y{i6MHYu(u%Jm3$G>64-!Ofl}!-hf5|sV&WlTlm!GT>j$S;Vb$00* z_ybFBxeWdD!f)6A--#esnT}{Ddv5%rP~&jhU5LD6$Z{#(5MYe_YmoCYv~580xF|is zSYaE$H34|~qNDRfo+*aaR>|@$w_H56&Cn#Q$IM~SQcH9xI(POzD1EY>+hP&@hZ56- zs;pBxsNZGJWXvZCtz^G?x7Wkq+$ek_X>XpkKiXdI@5_f+$)7 zV&HQ|ob&p>jQy^X_p3eWkWu`9LjBA3vYERdE8WQ}q#F;)z|JUcRXIYZ2;Pf6*~8VI zkjzE)+G{a$%+s)A!FWB(7A4*7;Xek0XRwXj#PZPPVs$ruX!3#22t`_573bT}uK{k( zHQ&klN>9$`2AsG;|AgWTM#3XzrUgmO4>L9UidmO z9%q#b+8UAIaEu@5ODuLgbp8vJOe+3!hR0(=#2pKvz{hC|^A$wrBH*5yRyPnf5~6S%OKhWu6F*EyQX6!G1qV zb4x?rx$%(r>|gRfqF|itVVJZhI6;_RPCZoMIQWWI31)p-o0;(L)YC4fJwqj~gRiub zJ#~u?Be(1NuefT8$KFG3$)1$ghxcaY;Jq#(mvXLRTX4E)kL3e{2AV^qU=7{yHC)&c|lz)Zy1Q5U>XTZlA6@3LXm*YR8u{%+K$pzs-v<-gHLo~JCYmRcUlE3RG z{VJYwF9+o~iP8)bkNvC61HWVCK9F7%cxEC_3+rYW(9!D!T0cIfh%+fuZMlBuGu6ZCe6rwEF@F+G47@UlW`NFPTuX*e)lJ58^H5+ z3HgqB-J2~4wnGaeb$Pvf590{iV$?eps4kMzOTq-kRD^+1%e&NF)G%K9WBCl~c7(w>>LA;F2!@EthlC#tA?{MX zQ#gxjz^6v|A$jI`zGY^|viY2Bhl(q+B#x*Z$-fTon}OTjr^#{oBVdb4jm<)5kc6!u z?l=HVKhF4D4NPBv$$i0?z}q4P-7c9lG5)i|joI~^*Iq(7E24>eeIBA$u5QkmLE)2x z+*LjxYc1()rttk5YleYEEd0BGst0J9e-1WahlRBAFJFC1H!~v!BzKaWw;iLJP5%34 zDtYW6Pv0$D&}605V783nyu0Yag@KnP z#<2}*&@Od*nAH71IR3>V_UA1iR(WL1`3G)T}?O)pnGEqcJg}CBf{0g@a?IC0=Qni*QIsI`E;+~+!1eOox{>^ zw4HtomeaVU9Y5*psi&+l=9E*&{*OU8KP};4a2oc;8uI!AH+I6}%CEqWDTshsmK+}KADJp_7ezQy|w{BJYC~iVK^$XUji6x6ga^C(#IebTqz2Cs}#b?YbMYce%`mvwyO;D`4GMaW7 z`!{1%Oc+|R`N|W;;Ie3|zoI>=8SP-MN)i zthdk!Xz$Lxtp;od+$l1Il?Wn&?aKA0F|5%)U^<9RzQ(Vb@EW!e$fWA zkdsF9vLu}7w4EPUd4!fNCkhy7_5%>fPdsrN=YtY@OinI5f<=s29wJs6NYa4LUxZES z(#4N{NV*QQmjVs$`l-s2bZLf5tokdoOR%=?kX+8-+cAaBt*w}*2l_Sbx-|i#ou#Ej z{*n6<50t7Qr;tjKj_njAhl#B}+Y$Lr2Uw`q_V#B0RVx@0i{T5D1E2H0+b>$h+~o^e z1DGfbe10YO%RgFO8P*D;JH=b!21eb&)xAGi@RH4$jEt9t+H?hHLr5r%o1d@2FRcH=UyzDF1ZC$U&NqBE3Z4RWlGRJCg zq4)@SG3rw(-1m>R`GjTb^QZ8dU_E+|iK(Bb%98y4!cb_qG^<# zTS%wea|_|tN#=NuW4_?gM?wDLdyap-THXz~?*Q)+>fMi;<@B#@{kEgPKJL1@nvsBP zZ@81+;`p(r-QzdUFh}uW6R#y#(N!WZMLC$U6ZvfjOymn9m$RHhPGzclpWJ&01gwyI zMwM}|mZW>(eJ&Rvrb}7YEa`iCd{fzVb6(M@k0%~)LA~3IEhOx{LK!y;x{F@4!wWU1 zxevhATqwo%Ys?S=6J}|*t5Ek>`t)PB-73G7Dtb$4`cGIC2BfG{5;^S+-1% zt3>9}gtu_e7!DD)%>DF-OjYe+5NH&tZ*ON#3(y^>Pj3NY?*0=B75d+IVgfErYYus> z*t`!H%u2)gT&Hzk+k?LCjlDCpH}g4anOQoBckL{8eGc3lW`QVv*cjq{0*HLuW#ZlZ zGcuMbmHDFqs$$EC&c6Y*Ylu8_Ie$5Ag#=QJ5ODSC7G4VbFAmIBUm&`{AYRstBBmsb zhO&{y32?h&2DDLC^W^_UAt~;Z0k*coI zp9o;ULmK4>at=6Gydk?TEu|t{*}7FBY>4&@H|*@*cTjmExFlV47?2MnZRAD;XD-T3 znSp(OqfDuysL>$ggDf7h?vQd(m##;Ef){u|19)mN6p$O_#!Q)!t*Wx!1KDb8seFgN(8@JZx6;AEczP+0mLuJN?giBqJNO0zHo;{|6F`v%yU_ZrHF#fJmh zi9g_QgMf$eM+dBxhkyOD<{uzH33Y5ella3vvm)Xnb=*4^_b2Lwl~viL2k0tSp5t@+ zN~BcxTw%Z85A|#My&Ix_b#<(<!1kHjkJx zJrZnbZG}mECbv$-S2;tvzn-@P7uE3zX9w`h-L-iVh9$Flfqxszw&JRrF4S(u-6ZJh?Jb9{wU`AyJ%liIQcI>W!3>Mi9tkk0Obx+H+d7Dog|#_ zR@?TLnuhv-*mJrlY|n*{NM-c0@U0L3gE!M(x!XT{o>CZst`!PDl>V0yon4O$i|EOy zR+6%r;z%QjB21*a{Q(}t9szI10*MlqFCD$5Hs=jN@5TNhY-&W%MGm?zZHL(rLHz}(_Xsv?gq)r zVGE9&#+bQD6`MIl=m4rSA^mc8I?A^D-p+ej zsFQ4*;rPFv~oRDmjlR^Ak+ywhtm!LPDr>B(l|$4ZYh(L zhhUGD0}yA0*t)hWV2wS7NkXvNfR z&C6BhjL#?vzNYA>?zF)R=D(qABb)ItC_L!r-%Blk+TxIsqn2*5t`=F>-fK(2OYrxQ zj8eQE{221*>kkX*?mlF(+R8E|LvviDQ}Bvzu&h=3&*j(JZoWCtm^x3CxbK9&Iad7H zAIWc%O05P=Z!u3q`xGjee=5ToEIDMk3ZKi;TO{2AR4f*6&@$xUNcR>9+X92If#*20 zPJo_8--C%}vHw9XqP8FG|a)$A7o; zd#>w&2z%#MOF0-f5%uf}<`im|tt9S?+hEjEqlh1uR37eBasJw=&>Q(r?lx!= zAwo2VyVS1bdn$7(mdDO5WyB7aXvT|f3YLKkLI2=aP2`~W;yF1$MX1<+r&B@K4@sC` zf0QzLdSLSS1)=|JIPuFD-YqUGVVWYTg%1ef_2Qe?pKsEK@s@0a**1c`9R}PsTbP`) z14EwvKvrE6TttS_HhDGb!ws}hy^vo!5iWU0O7Y!<4Rd`AIyZdjs3cx{hXzbrAwu-(~73x+0k zyh6#TXr@7ob2+doTQ*$)a=c_1d}KK>uH-%`TGyCB(?JADtHzR!B#4pl91^S&D<=hBm! ztF$t0l$i$DN2`>Qx9Qep;C%;`li&l}p%`_5WNmquIgjc)4fMUC?A(Fxdk94Gxh9MB z1NB7`te{$|!65^p5X}QSF($n?f*UgXu9s&0VYGDTgA8B>0U7ZQtySbQi7h7Qf zMq;3F8g$~Oom&4nS8eGP1IQGUMC^bTdP?US*8!7K{E=ArR^Jcusl|agApUbkDBW`o7%6)DqJE#o3WN^KoiBSzkFQh@oplR&`z{FaxLa(Hs%(`8hDEGw zRd`FO$|+FRd)qUlg$pP#?-{Yr%XT=gOxtmQKI}QQEbfPj5n0uJEO&7O;aa}pzA&wF zjjOI1$Rb`N8PU*Axs_iXp&trH^2NQPw$9*x!Fn!(WXI&z;Nc}-j|GHGFe3%^6Uec_ z98XUP*0cL7Ksd9%qqyx^vv`N7yLW?Qn3R-|q$l&_EntgfLm_{Zpmk#8KuD88gL*lx z*Y$5aU`^O&cLz+IY5p+}i~^-=G20Z@y-zROMQ#3pvtsty@f8(vi^_7e88CTap+zcd zNx}KxbsJaVdUl{`KJ&Di^h>CVCuLT`u`WEqzqZ~$$2%X^kAJ^FVGpA6C}FGmU^ZAiZTCQZ0qfqzXuLhiy@x-=frt?652W2v|Z zyuX(@@DdX}0mVpy_w32|R0&d-q2^R{QAnQ&1|%k+1i*`YGoCa`P}??3UM`K1phQiO z-jVH+5w|*b$_Ph}C&$MT6s(|HMdy^M%mGtrdqxm538pN?y!*CCIJ}d!i@`z)8M`(I zqCa>9K{6=n3M#M{uU|RS0qnGrV&e<=e9IP!^jvy66kca(DMj7c7z$Pu{8Q*3|4XRL zl9>Bgh;Dcb5t|=v6`FP}?KTyPUzDAqf&AvwD(+F)_gyG*cb5Z&ZsYbwR!tE%8^|G}!ED8rx_J zY(gc!#fg`vcuh8d15M)U%!UZE`zLjyc1se5l^2FoTLBN`az~ly_|Zwi{^c6{{z^#= z!}SE{<*MV#Ro2vK`=(IKt7xvFU@{ETwQ^kUb9R<@W2p)r6ZfW~f+|JyZ}67(#y~gF zCv1$JTb{q?JIjAPv>5`OonP@exr8iY+@%G^+@*OMr_JE;i;rSdD_6yP?D#}|;{<$% z20AB4$FV-F5-dN?5Tv6;l(66y3UK_67>}Coyx8Ogh2XLzM1iNXI%A+(bv=~7J$%Jk zFl(n>93I%RoKm7EGVFGW5cTrxi2V53N$*M@KAaDgbmV1@sl1DI61k0pqj!6<>#z_& z#}KX$n4YbNsp=+_^bHGt@M{_|gaA%9V<==J97MB{0P}6L;vC#1CQDXT>;y=F-&Hc!aVoQX;R|4-&ogS)-3gQ z042x3K~BJmcG8>`qGHKf@|J$dpucCO?2fx)QTE%i1l! zF(ybAH*=l2L^me0u5PAr)T14A-)XY5dnH{BcL%AOsfk2^=(86m(RvYaIog|d898Oh zEpXp>^{R8u)aYSeAW*)pi&V=(yPAaO%*P*QXNe9M9=*pDv|GERZ-fL9Hi|}kzHZX$ z+UTAo5vrpFa?z~d9iyZpoNU8v&!+$XSph5}J85fcO%}B7L=T1q1b#CJ*(Ldno#JPu zTj@l;t4T~UX7U^Ql;#QHOAQh*wUS;&@E3fqVoLPU2>RYGKE6^U)#sY$1ka@0keypP zX1R3G(mXowG4;w5{tx`VIsSipT)4+uF*&U{P)io+?Jl>fJWDsxvNTC zO2l7L6o2+UEm;N!6kE1ab&UY976w z>^8%Umn!OC7SD&*9Uy#^0`u#2I^=lsCMbe{keU0zc_m5%otDKiB`^!!lZVYB_b^&i zz`PPqUYIK`aT?bpQ;aP6VldJafsKe=BSh}6qRDRccEr7R=}v5 zljfROD8*2q)FvIW7L_ks6&wpVJc|e1hNeW%|3Uk8C`s{v!i?}mBbA0$?RUq2^ii8s zG7MaS`p3^2<$jK<0TV)X|{z044 zus+`NAFQ<6hB@!@uke28Olc0BU@kHweHUf=y{zqHy)Wea7X|#!gZ-90_r$2vB$gZ6 zVr?Au)aYHmFtFhDxprvPFl%wm))^mr1@`CQ2KoeWCyz(0wN4UFz`&InoFzIr(itOugmg_=E z`jMyQyp)<;G28a4Qw}g^o`!zf@g9Qw86m+AwBYkW^8mTW_YKd1{cGa9-fuV zX-B3R=YkD;IMtfDIU|7QZU0UvbgvFQnVfO0?M4mNU8p!_xo~ua%8n6 zQTBu<9N~%-Kv4UgLG|e(U};#u6U=cJwt~Zwx?En4Z7O}baZ-v+H}Bg#k=HM|EAT!6 z=zIB_ z=ffcw4_d96k}P_oy!;$@{84R~ffF}}gthkH*1>}{1gx_a%7hs>{7DGoX&JZ)x|!i~ z{pqj9Nxof%S%-ln10Znz0&`R7q7u|f#M~zPiiIkoO-2i}L56oDBlt5+_zVMBi{Z!^ zm2~_~ZD2qv4ltUiR?_f9wbmUu&LZwMb0 z!sY#A(IF>hF7O2zTGMb*{?C<9o~Y5s8%JR4^FLsE%lRUrZLJczDK8R+FFGp{fxZpR zyZE(UEBRJVdzTU0TCWGG9Fi49{v$73gJe8lgcrq?Os}c!niCsa({YW_=TXzECyNb# zicK$Pks?6Y7XbPi&u_!Vn0cP~dxx6}BS~BXwD*LhQIeU;TT&#$Qia}$NmKrV(=epv zk6pDB)bj_uQKxO}Q@>c7`1l0JlzG4q49*!pc$nPC!Av(X^u5rDcH?vAJL1M;%(tH~ z9~2izEGAT@>#bFnCCK5td}1^%cef&Bt6ci6g(i*a_mP9zwsdPBh{Km-JS2 zHwE+5Cyr~NyVl$q!?M_4oJ#W=>R;`oS60()WL-o1Owq-rD#SEtlw&_tdi@1v-d%A| z1NvYrkk9qe{HG@mABKE_aVNt;hppdmXVP%Vd*Szoi9mM1dq5z6n`_BEy#$a!YY0KqK^C?T3|L5j##j`B|GeBpO@vgH8&(II)W~Uza!x8R?3kSh+m9AJ6CDo{dH2cuClIUSnsWt@xTX&1Kbzzx=_FRTTC`+M zcYtMy8}Opag}Vq=8q7&IG;NXMKkz8Nn}HSq{(hfhf0HmE@DkA?WrXp)Tw)td?6GH* zK#Y^E;udS!$fn0k7b%`svSDC1Pk33AQ(i15RlMJJX1>_>h#)<}o$(*<1a4GhHe~ zujy-?a&m@aTpj=K*+it1zIjWmO4WjMOd}j`mJ?li1ON)K^wnd{QfWZxBSrZwXioD( z%ISaN;`pR2Hy&xtB+wN3aQpB{C3jg-7qXio*m?8HCGZjW*;HXQ1XUh|NtJ_t4AKq2 zs$aBMG>4liS}ZAb)fnZWC!u9KX`4!Mg~EfS_#(Zpvoe11zfRv) z7c+&t*-%ha;QN~K3c7s?B*FQPTM8`xo%YTr^6Nywn?a`s+^_O&V+XJ2Vg)Ry@u7VA z^o#qYW+zEk+nI76-K*`8Zp$X(oCxreLmRJ_{fl?)hcPx1=erw<`ZCo)_H{s8Yqib; z49A4cQfvaVp)!JA%MBp&5HI^B@35&ovL-=w?x8&XvpoJgd$a0Qj!J8?5XF*2QiiHU zDBFb9etMJooMEgW+R(S=ga+q*I*mO*3C^Z?=;GEz)C14WH5j*S`rR~RV}YO&ehY7b z7@i67f}!6A-H`x4Gy|7NaZabXn^cUmADx_VVKI|ns_uvu zwP72pdag{HYp0tFSSKHu_Qlv2ASG7vNwaV-pbwR}dj`^dU^xyZ_~`y-w9Uy&!9by1 z>T|Uo*IiYw2^D>9NJJbj23%8w3rZ`bqN26w+kv&C!09%qm_b;3Zp+V_h5thVZ1IQx zS+epIC&hDqX${Fds|GMl&Y#yfW%ajDWEW$Yu%Kj8^5eE-4}8scRsgY0>w95R7v)SF zXb^05epy2JAoS9|ve&7W5FmTFQGsN|V)AT2O6b0lseR@5jW#2i- z$tHB{ef|_7rL;s>?PR2}ORiiKC1RVv#HUlZ#J3oa$?y@;!b|&gT^+pkxul5!7c(Hc zy_U(k{biEc4?woE?s$8qGw zuV`u&7P9W>kEEJK_ET?ud=vv@uJj1^FfQGcf-DvB!Zura4{$P2OzFdgOPOZYu{K@8EqE(eFZcAS7aJN-`^q zn<_4S-SYC~`Vr6!)r?_DLc4Un+TizcVX(0>G(a2)m6^Dn0Bl{j3F1h4vgzF0PPpUG zwmPS8-RcYzz0W`m1$AxVQkQQ{k}!_A?go_R0^Bi;nlH>h(AeJ1a#Y#d~if_!!+XTYJxA74hwEODCclY|; zUE*h-fRAp#ng_m@SUp-CVKizfjK=Owy_(z|PqEenW}*=YzGFyDgtWg5Y$#oUjrGyw zC2Hj!s?6bH3gR*H>zg&y%}xxJ4zoCOlR(m1Ud#~1!v=ixcaV|v!a%?F@bLr8j}Ips zx%BkR%`pO!52~9n?^?+&42Y$!Fp@>^ZjtsdRBT34KEC9_;Fm9i<=5m+nqjO`-2*E- z5v6vz2S9S7vwVY8S^>yFbPD26V4h&xd2_$ajEkkd`bzw=ScYNt^=3dxioT9}xBqwk zh|2>mK>E(r#{>(rc^kb`dIFFaeL6x|b)Jn{jbcix7}!q7|f`nHyw}NXDin*29=7l^S)QVM2znOm>U^Z@_M| z+)X92m)A@SNvf&PK}-@9Pv~(7n92IC(Z~k0WZEadoc*{;-Cr6``E7>hHdxnd%lKLF zlQ4K8*_UaSv6G4=vh08o5l!zi(ZU(B?T)U_eSy$@+5u+(8nUA(q~o=~&XZ7#?vshwgU-EzLfKA@RT~xpV?GnnJ@s;bSIrC9#G)t^O zh;x(BpU+&97QtF`0Yoc<3>Q^>$^OI|>~X?7R!_0Om=#dlyYz%b#%+wKbc3T7Wp&8fKu6F zUcT&`V|qK_Zf#ooInhyR7loxEnDl-UA_*$l_mj~fBC_Uar#8$*ur&KRkd_=R zN;Q7<&+7z%dPEnB)BD1yebMgD#C}Da&V)GzlR#{0p^Vs9w;<2>W7W=QNP}IS`crEJ z+UV+?9t_j^4OK9)IYv}?|EJw3hxtzaa*Im@gx|LmYBt|eB@L^gd=sF(XAhO~)iDlxnyv@Z77_lPslwBe(s8af_`dE3*_D#xV=m%U2;&nj-Mbsi zBBSRdb32QLa<%AkX5j!@bYlGWL7J z|Bfjbme&Ko1i(I~)D&_Vn8@>$XfG!ciEZnyQ8h7JzfjT1d3tfj%$zs=)E8{AZS+yi zn9|RT=0!To>-U_T6``(hje*Fu!m0c~H?gQ^-2nskC zBcVgcyB#V}zU=w{-_p*GLR7`%-W0tJU$Ru&MGXx1e$1UH9JH9Wn2muP(g)Oi9ut_TjhLemjPVsB#Hp4Al&G-&*y7#*@ zriL#v&+?}SaqedulL0I&^Dosc9k|Vk5b%GwG_Ftx@C0>}K>MH0(7W3!`Z!rofILzs`33d~JmK z`|u(t+zqUZW}o`p;KO~abbxX38>f8WkA{^8mN8sQK$8ia!xy7&eLnCZ3D6#18YW82 z2O{>CrZlRWCZeTbj!_pbQsd*d^PxU>#o=*UrC7v@bW?yBC%TCMY-S%?8qP3BEUU9CW^dD=Haf_y&%01TsR_V^ z)Oz8|cakbza3!8{rGCjaCbw(!^S3lL8|qp6Xb^cl!8>e46$+guNLhagqXg#1svVEz z>r?B}$HyF`7%^sUTiaTf30!L87{lj}W_J&!FI}Q--=vmwh0>k?T*Jp$J(fQ|y0@SJEKj4A+u~YAq=TU3v4M&v|7Q|Y-pqv) zAT9*RD~&(koYuzelOk#|m~H1mTS}SY<=P3gX5SD z4zpKS{XE{qfLQ4pZm<L7>eM^PX=1b zEQy>3r1Ew^r)MW7h|RKyZwgvC1%)*K`=PSsHc(Y9q0{QcE*(kcU#2XzK#5Q+Sv zaV1yf@%ItWKxuS!Om_JiVS{x9tKbiE< zCs;i&c#ahfFO5N;VvJ5Tn)5hhFtQibXYoIJ& z%@XXjfO5tydaBG5lE#6K-TCwo*lQy-@F%p@D5b$Nu-E;!Dke25m8d$JDgXOq1={$_ zoo_Mu_lx%y74L6T?VBp#^`+gr=hmKj%Yru;w(OpKrtbaYtv-{ko0FiK&S z#}Xq*@6Ye{Xa>t(XdUai4bp zQ8DTAFE=}UCXm&fPUESanmRQ}5PbE76Q?#UG#4EJXHmbcD2}hxs#+@pX>e$?Xo6(B z$QZ+l_HnA6I_~ckni@2cDJZvp*pXu#(t5=BP3f9~RLnHZ2FjNm7HPeDrh)qTSXPg< zuz2rYeJraf0no+wg)+Bqj_5w3eB&7m^Y(;GR|SV9>fmo2!d;rL{)^{xB}2M#rnV*O zajaA40X{ZOTDgBO7WY|!-YJuNj8mR-s~=&l9};GFsWQ;}e|IxD)e^CpJ#&=R!6O+S z!3r7lJZPKf;IRyG;vwd_+aJ;M#RtKU2Mf$Q@EB*_pN`9$H!bE7km+N2+l`7I+}8GL zS-6NX2Qjw1pk{C68Q7G>;v6Jm^CA4l1Ee#VF?pfdK~%-TOf>*j2EadF(HcRpl3r18renKV(C9tThL`u+K_*ykUKgFPb}+ znC9z@Jg?9o@16-2<5TRJI#9}L;Nnj@(_rC`>KZS;d#4T{RFcVy!u zXa6*7`!(Lc#`%~}w4Pd_zVrr@Bf`q@qfGYFqr4q45(pJ(b^imDSo8im@xtib@rzWs z6+`)-(jh`u_Q#pmyEZ_uh@qFdt0=P$S-e1ihsN08P~j-2ycJ;k_9uIF7lrMLHa_@C z?@y^@-p04wFUG+@rA7W2<10aJ`$!{;Z&y@GX-Q80VIgp@Q(M_~*(pRaP#8q5|3O%j z*Vg-!g$=r^rZY_3Fui<0v78Q=`)QRivgYWtnU$FJ*kT1hqwYB>Wrn=s2`lL&a7A*- z^S^c1L24A85%&vsb2FrMYm34K1L05k-8F{?K&d-+h^dqIZz#YU#i81IkIT)IT}sr}?Q@>}??rrP*S zbq@3)mOKy$&DVY|u}8+g@VY=|C2(i`l;{*2J!&t<+F5a->r5*d7Cr|7pK>)xv7Yq) z!ql|Nvljhp;~ZeV-!2=QRUZ$*!oV5=vDxx#{vWKq)ZE5 zyAk$p5t0d1OLODn&*XqN4D-u3g)2AHOyfj#Msa%N?rp&Wk@ZsJDM^@*A2G|Anc>>P zJmVw4``p2HleBPRE^c`aJY;4glvMCUsg}Uwc_ls&EzegtB^DV}9s1=CC2_er9`M*u zD@A(uteW-r8$a=>+BD~1Bu$!zl&MMT(*`Pb=k*8MjMKqvQnqvjizBg$3|(#_DEVYa zz2t_q{_K&XhVu3q=(l;m(MF=|51M784(0{FCmwCSyu3J8 zj)yCjEMB_U1+KWDfCgfqO)FyJz|L7)ua&I3MaBYkBs(}&vd#!!ffYSY za+0F0l8Q`9HxsV1mAB2<8pw1NyJAMV=irBI?DQLhf0szoUKT(M|4ghLpl!Ksl+FjH z(F+lOXwiRnxf1Lymurdk@Sn2nF4qISwt)?SE;-n%+QXy1F@56qY-w0?wDZK+&wLT7 zO}+~Eao^6-vDMPFPRrY{Oa@c`bykwZG3HrhhuIF87G$)VaoRGDc#ISK=@Ye7_-Jlq zHpV6$og=K@{Y|CF&sxj>Vx)imkci})l5RW$SbLw^mu@vkBAVC#rM%yOdpoyL25nH@ zE|f2)CtWgx;;tF!$NfISTe%Vz>AJE(GsdL)i*>r}kGHD2n#nik6O*hBLJnwAC@yd) zFab0X#i`+=6QiU`7wrdsfbLXTHs8EOqiQ16zmN@?8;WJltQ|cdmR8KG*dglT#5$Q+ zSg0`DE9ubzGp|_SyU+AjwkZ#cw)8H{DCf2Ia*pJ^sH+pZoO3yEjQfHR9p$dQmBb9h zyyYixcEK1S=L{~SOIS&)N9G4I?K`-c-kA4uxmUl`RDFzA(keH|<UFX zHKCuuFFcn&>VciqU2C?>Jmv8y|Cccn{kgyDzHa#v;tUP6;eq9duTaje+o{owAf0QU zrj$%_HNT)RCET0S#x&5#LVdZvooh&msKi;L6cO*8H)>le>O2Nc`}(O18=nPhz~ZI& z$UT!5f<9siowOoo0&4a`{LD?(7E=HHS4wq+w{=RI9dOcyU&n98d?Yk?)c)3-nE4 z%q1lWp|Js0Mlky0!vku){8ojwAQ#C*x!p^p&1Zd`jEk6a?N3(cfkp}_OU)ZtT%WuK z&C^vI+N)Yc)(6fas!!ehWDJeX)OHnEFf0HKue@k`QIOA$1H|&z!?JwJ< zLyj{nqfT;0l4l8?ny&o^-l0Ub2RKmGFUBvLRn<%Q1P`VGh%GNzDXp4Dzi9NbZG9dK z!4g!k+h6`tkk@Ouj~aLh_$0A4mW`qhLe722P=6>x)=X7vS8ihONrW zhFFs+%g#zaLk)({7SSJpo2=o|*pa8|+}|e1%TI}}cxfiN^1dgOct-%YADI$0YXg~n zchf%BsJjO2q-|}1QWv8p?6%kU2senKcm6Pzgu~B$>$0p%rj_>_85+a@M{i-9Q%ras zD?6mKp1*#qHvN}!X?@`|tCSPQ7a4c#@q4*p2bA$KOXSdf`4BbsGnTcU$CsZs^UbE7 zKAM+VYMF>|v4U{%ivJqe`|%|bEfWtz@CPXYPv5a+ixx2KzySxpWcQk<|9a9wVz#pALg<<{2FG8xKX}&$c`v^L&E*PWCI-qA8 z?5Pg&46)LGpTY^G=kCXqa~SWNX)EbB7V(Qy0@~O#*A{jw37V0^{3l7)BD}cY8*(0L zhP7m25+J_l;PUc1EHOg34%#C@L2c!0C>x!g(Wr_EsaCI5#`t&O?Ju<&Q@4W|=W|i({8S~6-=-k7mH$PV4EWSR)Jz-?C%%}eHE=%&D5rr}efP~X!W;Te$$614Y}bsGQefA{qNg^Y<<#27n0 zX-EU+q-|Ty-PV^8wKD*?h*>c}alSxbIdT?^|IPf@$gP1fWD-|?O!x6|^})1&`a-w1 z5{>Mn*7ony1I-LE{a7i>va0T1+)?Kz2205<|xcNw3f%}$S}d1a8=l16Fw z8AeGnOI&Cc7#{e?UHnY|Zn@YP6wLA8skPyv6N0gJahOZ!4m1+QmwCz0axZ*QJYm!` zoaUjAcWBNf>P$#N_zG=G$Q9A@2m+S<=wd{ak)4Mb8Eeey2Q}x$BQRuE#2iw4Cuzt% zNd;hjZLfOWoa;JCPbjX*`>~x>4RFP$h#8QmS+w^&cFJK|$_Z7?(aZdcc}rGGEqyJ| z#MEAGrCwgaf|}lU#*L6VZrVA{BJ@{r*7NxbD2z5RJ2+-!WeR@{(aUv^p@ zv~fN(ojMp*jdLr}aGx6|)EByxG!y#5#EFeB?ML^zuGju(MYUZOQ@rTnm{cprkXm}X z`8l$yOdDk{X2cGWv=ua@{Si?a1?wa@@FA@KblAIWG#7ioAMaq^|wCMPjU?G=*nx( z@NbOCW8k?>??Gk_dElY*^v8rC^Bv{90Bg3kB}UzcX}W|)P_+{wf?VjS(<`3hZPmL`iF{E3&rgme(}~_ zr!Qk`tEAuzZq&i2Gcq&RGcw3*12oIuGk89Xs?Z8Tpi>|DA9013$G&7 z?|nS>Fy;7snsPY-t~ena`mH6Pu+=kWNf#a96+}4u9k-n-NU4s4sbu)CK+?1Xpyk5v zY4*tcNx7tx3vGII<_z`ijZR=&BM&0HP3w#Wie2zt8M>}Y;6WKqD?W#zucFB5r4DNjE*%)n_aTHGyB*COyFQEC~!Y)z6sxwZ`o2@VoYRVumXL5gI<+o#i{>yu}zu62aW~b|LgP)TH(i%tNLi9QjW0pft8;npng=Fmwk<`5l zgNwlXZlO2<&}WCfu~S`q-C132ob{vafAuEf96SO6(ITsJsBU7LUanN5*6+5=-iy@~ z_F2s884{>kocraT0y}C6t9(LxMuE=|!{T7UoK8vOE;ij016pb)TR1zj&rUJ4^|0$z zi9Tf$Rp~WSt<3&2B^izunYd$xitO$$$FSbyI3rCZwp}?3t#`L7KL}o3z%wA!Tc|Bp zQB^LfQ*&WPn1~uY;qQ7{F&t#ai5=YI;r|G!%zQFlzJ_%YZ zkQ3?kk@fcg84tuR)nOLmx+31TVaW6l3QZx_O#dcx;NB!lu)?xi;TQavbYlV2a_BVD zm(0Bea;-)?Ve6I}A^?B>j1-Y)5!K*2WDQN#z9$lD}F9iKu_VC`lXM$bisk$*xx=RIi@8sxi3Gu zn*9wPUUlKI$&lq1YGCoIRP;JoK9_7U2OFx!tR3uxOeX^MbL!1AM#?tvi!B|kYJjUN zKMKd8syRRPCFPY)wUdh+Ei3%8-v_B$lbkNg9lHvQ#sX9G857PJ+_Y>ptrYL30Q#O; z(J)n@SFo2lcq`_}(nkCgXM9vuYrI zB=IFiklY!eCEyc2eox4wFZciVyQPGt!%%wtmhETP{bIW%rFjL?4X5PH9Wwips6`(S zGYr?q;vAQe2+Wimt=va=t8O2X>@H%b#$4^q%WK1wKrtcWDr4;)T3?lfLCYihrf`Yd z<+zT~g5@^p;veq{o=^k`E8dIH9TpfTN_{s%^qFKGNyN0Vep}gb$4-N{R_j;n@e2#1 zeQM%{u;@mL&`k1^*xp``Eg zjWU*kJuN#EP?H=Bizs!ScB%OjU>}4DKU-erms|0C7tKfx_twptbS_C5A+592(xwDI z*kvwwt=lh43P3Y+HSoYf!&#wfFtYr{x>CQqn==%hhpxnjo(t!JzR!< z{*o*W{XJ74e?m!l1Dw~3n`PC#0};w*CZTIG0_v}np-uB#^mDfRBq6}7D^mL_lIwIn zmg%VhEbK9uGCukSDLHtupi!;K&#H)N7~rPD147b3D>QEhpR`ihyFz{DAFL!)W?!<8 z91x(;3-*T|J)IWPppl%00L*QO`69OiJhmiu#;<{OBk+? z!1u3-WzhD2aiME?2{v+rabdlUZwU@^KL#%y!kh@d{D(u%7w@8;0Yz_wrK;M^d|INa z1Ov}F&akfmY*jqSD!O_n@x>-5B!Oy-QTYL(F6oPtIPvC*fH0uY&>ai@)cC;%&K|%( zw)2k{&s49q<4Zz<7M$oBxOSW>7oi)6EqHsg1C9iXGPxQ*N;`*p@(<@?E&i%JE-qfw z4(7rn5Po`hE*y&Mz@-uZtep0ol5^j)WkL95osg!QQ-9P=Gm;(yR#lCJ4WMHm@pzJs zyXDOZv4`Pw`i&VH|KS!*LE~+0%3kaR8GZ{I2CAVZ-^u(ly^J3TyobBmHfmV8>eHpC zb<)q;aTF(GV+2H>RSN@n(yosep7Q%nu=72kM&H72h*pYml4_K#FfoPK&~Q*+(3tI2$DU&KxZ%|+6MImvQh&-i>+7Q;QgJpXCY2Z>#82WK&~s-A&Rj>s?dhMx#`1Vs}Y?nPm*Hri^j0V3{l8 zHHIGDjM$AJdkZ|peB0Uzc8VC}h!Vxwrg%4#IvyzT= zeo%_KdS9HP+Lt2Ctth*x)%30MJGtU$J}m=gdwUD`_#78pQmc(%?fb?&rWv>-Tw zn4#+2#(y{TmDbJQz}&tDRcS7~v`*e3Uf;u)R*X*hf7X8WXpGiASr5c=E7HWD z_GoQ5M9!+mI-O2QZCqV!XH_v{Ru9;Sx=k+$0^85SeWbrxZm7c?c?NJlSQP_x3HhQ&!I6LDVw3xsln4O0W)on@kJinQn^tN=oBl{cDiy73&@oyH zqokR{)ZzP`-1Uy}FzU#`Xc!xd)tS5z5zlfNS9L@Qe#dJ4sRjKPBs4sC`FFzV{z7yK z%37I^-#jnSs3bOTU^8UUB>S=stJv@S8>F5ejsBAoP_O3^TwpX!A%7@DFR6v>d?@Z; zz{{3Vj(an=poqYXPvpa^`%x)Q-wNsv#Rbj)S3D(!ddV-HXZt4o`-zpI#k7GDiLS=d zz{Mttn<~v{v7{}Po#p1wtej4w#lrs{hsCH8*`=Yy_OKW}M5K78S(ybdy1L!9Tszwn9ui~Cdi zH8{%2@QCyq`y~?kuHjndpVha)5-g&c+`wxho%q~%a-bd(f zloP{@m&$yMFFo?l^fO@Q7n4Bxo9+3ni|gMJJG7)}>*0(W2T60e$uYV4AG!|oTc=OH zAaC5rT~|Zi0$ClJS4iFU8^?4iND`HZt}O5jQoF~-xDTap>aW;9`c$0<$RFPpb9uy8 zjEKnJBe?ltK@yFL@&jmmJi+bx5ye#2K`}jf}N!FhO!w5m4MnzyNTj*QHOysfPvD^-*C@SwB2TnO)nu8#mTyh3qHX&5OU0L^!i zlTAhMt>qPj5$suV`LCzST<_H(WaFakqJqx(i737a5RU#X;&EYC)g+i=1jV(^EP?1= z!$8Ys(mQa?mwLb_az8ZfK2_mhCCg&Qedml67FNqvYPB@Q5bjf2W{LN0fomvw20~+F z(Y}P>GlvczU0=ELm!U*gp-(#m-MP%g;`Liq8X;BZmInRu3q5rh9`I=^T7kMYP&Ygf zKX+2e0q=AKU;YWJ>FDWaQ1nX*#gW1nfJG!={^%LLYF(FIx*gCH>^p}}PcK@zDg;rz zdh=L)mKi=r^khC9p?`5kJTnTqnLa`H@#lZL@qwBL-@C_zl3<)08MoxKd;m;r*7N<{ z{OZ*nFoO=+1YreNuKrfE^^%b1?mv-GDd^IJX0vrXP7KinTgBytGX$*#r59~#6VWw< zo1zGZID=`%q4w*fv8NyIn+NHq$7^{z`5>DjiNV?C8T%oqvO@!z)#Dy_iY7__UzZg2 zLtIph_xO=!;5%2M?J-M@nVn1HfE&wWCu)H+3;6hoty7}D;lGXFXGuWk@ zQ=&h49L!i|BeXn^ zqSHI~i1I)4)#WdQ)|L}cm!@v+y9~I{o`8t|NsAUcJ`wmYwLGgzqX_wDz#cF zmD-Agu%~A#M2mh5VUmneXImrD-f@uzlU_oAH-^*?@prowmjW`$2f zSBS!O19rrH`HPz+9%{=ZD7Abja*qszLTIVef-8{|a6u!sm zi8flu#6pk+MdnK|lBX_Uye^x@9BH3HX_pw7BK0PpoWh}=;Ods?X29xIZVp3JAdRa< zhQ%(<>8M?hJeL;E5CA~t40ql%q)A&f$_+(C!1XuKQh%}45hS-UTkv^k>ddb54le{c zSOZN*AN=dD?Wh>;q{U#w!Ef=d&G8>1W1RGS-c#3XB%C6d_sKJw>Mp~fN=oc%NPjjR z9bB#!!}8of*Uuir?Yi4@t?r#=A(XVx$9BN|&(wpsZj+991JUT<=5i%JGv!~Rl_~ML z_{IEm)ZC5ttb5>EG+F)-sY{%b!u;&f7aykp6J+anpG%i>0MQbhh44G#fx5l1A}+#y zng}lI**dB@;?_K}M$OszKATAF7UFIn4L}r6aVeY}U7yX(2u72i9d^(<>;h=q2K#0z z0CO=SS}!iEg9UCJvSf}6vuXYO?e71qt;=7b4efiDEj)`PnevmSB(m^@hkqDnWXV}7R?&dGPSn65T(HgCN4T(Kh`NVDolj~km3i;8xe(E>m`!M(kuUTRVRx!p z^>^cV8*5n>?+kd~fVeswc;5u12K%M3TEH1U+~CsoUEAWI3a$7*3&EnG@*3dcMzvTf zU*)CoC&=^clJUU%c}OMU3=h2ffwN{Ye>WvH2uL_dxUiOF*(NRd2`oM@Pt)DnDXF&> z`OR=%9=QA0Y4JOx=_4gDpY*_NpKe=NLVQA!q4B3g(a`X0KLha#M_#q0gW`X}v~u;Q zuTR#H53DvO-~3sdfPVdwJW9rfohzd7qIICFaL%)ZL|(uTs$%IgVn1_Ro5JYk@#`Ec zkotVKdJ`NcKdu#zbMk`D1~2URrhS8nKIr1{I@deXp-okQP3D+|$nXn;@38$Fu1g7h zwhy7-=-i74`+je%UK1K3rM1C{15-WCbkmb3>#i-^g|=z8C2xal`{NVip|f*|2kzCP z*DA!NcKnaf$%hlehizx7Sm7Lwf&oEk0;9?UJ;9%Yg*~UnJoJ@uj=XQsyviYlNqNRA zVAUZ?!OA4;8vP7dGIts`B6%`V%(1Pn5`k_hHv~Qg&33-lQ8-yyz7}ZZ|x~k z?cu{l)_LT{@Fm^+(w*IheIv-G8u<%a$}Ic&Y?Hy3P}ya1RXwE#T$x5j_n1}ZG2RJA zsRlDK``;x-S}%Df)6UGM+76>|Xm0c5FWcMa(wIvo=ye0mG3S9yy&$!5_jMc!O`z-u z<`DKO^na&C%*;e|X5}36Rw0W8Q%Av-pCSyukR#L%n-%$D2WQcI&ycWdb@s0d6aiO? z>3qnMSsR*^NTbWFR?CWwdtD$|5dX7v0$ zeaj;3i90mmq&ZNLt)@fjles9g2j0{MAF7K(j8lQDyB}&E^XHi)e64A zQ!nap%;_n{8xnDsGcEp_5xSLgU{){cP@z~DrEe7ooP3U(@eet$Bn8P()q>jsM9<_* zr)R?NKlY9`I&C5qi9w&gDOR!YPQND&4r0=oy&Hhp?S!>v!}RJS7TuOH$yOb`aIVpw z%O5HCPkni&-m{A(kHk#X9TT(}{pB2!AR8%*7$n9$lc zRdKxy(YuyKpdRFS!3PL8+&y<*%CNO*AqJ_wADWVw6xQ*Dy2Gc!*C61PZHke%&5V&P z@jvz%R7w3iWqzU7II@@i*T>o6e|%ICnz=^2CERhobSW!KYj;1lkI<4>ra8CW{oiMMc{QOiYEPi@ykMG1x*>Bj_U%6)~~Po}NxXiDfUr2d{O~ei#WjfOi08 z(A)ViXDhIek&r~T4Zy&h%1;cDdZuVbu92rRSiryngpQHZu+w6WR2M@a3^=Q?r%Rjd zsdAmgc7E>SRq;U~7MmmQ|0@N(iwR|NuxcCk&U^VCbI$g`vTb~8py9hT~f;SS^1Ak14VA2=KvLOts(6M9vD51Y~5Nh_BAT-{T&$i0WVtXkh zedfI6QHH?lm{E-j$$JCkYA)xRmNOO3+ojdUp}P|+<&Tg$xj9T`j0T%|hl zx1HHfj~og0uSH!^E$lyq(0>QZn#LH+#NFIDJu-r+?x+?J$;m^5u82Bzd`@aI z$VZtND9-b0dy&r}E z(|q~re52>Dw03nmUM4tJYs9)6XNX5uV*mboR*$-LZ$#3KMn>x`ZDsiU zm=;~*g^UHDuNt|J+oLvAJ(5T2|7MwpF6GlR<$59(E;2`A><=Z((iKEnc&C!rT?GEj zP&u1xruUkU@^yO~)~JuUs3J%L`hRgmSx}o`PWd_9rdE!NkE(z;W4-+4iy|i5L$-PM zw8S-n2bo>4@a6%hcSG&q85_VXSAvB3sv^_}Fw$qhRy%`|TJ*J{JVMvfK|4a-zWPUR zOZNXIXzac4Ir|9o3s3Mg+j-f~0N3m~_SSr(Ma219#=FFjQnzH_1>t`P)i*GCk~TQfX2u@c(S;Nm z-4GKU8e=$p#Qz5~I~<6%f&Fbmkle2UXup-dhX494vT9*B7%f~2T))Hfzh97_Wvz1C zigpQVkWgh7oa9}bwcZdcyhDXA?@}uBKu-~91;9JK=yqlJ4BXz=xNu69wM|m6{f#=D zcdgW5l1eWLTZSk?b?J1&ldJ+l9}mNzb>U=mT8t9tkF55|$r^pk6`<#+C7emZFVDeq zyO=}FHGM_uLE8M;33EWG)fLH|VqADMqV@ysA2Qoh#4HcRZXV!WAJ09gd)af&z{A`z ziP(019&0Dl((7}9f|^cX{&NT}ItpIF?V5S+kb~w>NI|}9CU;QoO?`aK!k;4vT7{!H z@mL{B1N&vPcvllTrVSbix%3n^h*S?ocKaB4k8-ZLaN~)a7K)QqT4_=>(|{*4lPC7b zm0vj5jIefgD0Wc)GcRj67d$r4@R|?5$ER)vA#gXLbZ-l2`-W7O0#xn$0X9E^n|bgj zsMQ(oafno^0Urz=ql=aS-JAtUQM_k=JVe)kwwDp|9f3?&3=Za?F4f9s&hog43#1(` z?izpfoh(6I`#u8Ox>1}@b@tRawDqU>9b3MVDfc5ST>($N#IRgQy=}`@>GcM<^87T0 zfN13&cPK$1B6pY@wR18Vu5iJs5(YkXRci(zr$fj_Tu~K9FP=#&2TE*g&~KDTbIA+N zMmk-%Y!W;z6MyW*TV_rfl;ju@wzlKHM60jsW>EXrkK(PFgb%-w7cW$r@y`~-;9zVh z3*ek>ZeeYmoU~r?2QzdgML2i@tZZOlkS8nQCF``Ofb$P7H#7Kg!dSb*`B$XPY1K0luF5fVDgx*n1oco1prKljjQ{w%r zO}s}(J_kU(!!j)33-H>3vH_C8^xg?V;NQI-)k^`(YTU{V^5;U{qB?xRH7pcAh=IDe zRr;PG<2kZAU3AQhGdBz^v{AS0)@Xq0J`$1GdwLabu1;h#F6}=C+6UJLPs8^d#7zf* zr7*NC1W`wGI!u-1G6jJVNnKY(y>(od=7SxrhLMc@H00nY*Y*85Y;C%Bz7~3U zwv!X&s!2I=d1R}X^QKKuv)6bdu=>hOpu=6)pFicH{#(voR+J@<0LKfADpwAAC_Us8 zG;Mv9)g+V$vPFp4C@@B^tb~|5oz2hF1{h)>RHi}!HJ49}o$PvfBpX$>&lR=NKh|dH zr>x0mD|X!S3f!y77wd|e4&)d4jTd>d2~w55X-x zR0=68D~rWw#ge~->SVJbkkh4S`5GFSBCV9kxNt4`eChvNHhl0R(OhvNLD48_5_r{z zU5_s{YpeMAKg8-gyPUx~QfbIGU-0J+!u2TJ;aKJJC#0*;oF@D}c!UQnzdSvG@ib7oC)A_uGrx*_` z^}L6MaiVd*6m_u?*41$Mh>qjh`K+wIv0-^YZj;KtevZPR|wYIHKCCe zFG`I*94(N6KuR%S?qIl!^MSb2)!zR089T^B!4=mE@@zv|Lt^3Bx7>eh5-5#sXq2yd zF`~`Cq~jdK*#coqVO|?jxJTJRUP0N2V!)L51T8-q&ut{WKFb^tldR?Ez!nnQqAC?= zO@gocz+-u4r=N0%>!Lg)mi`Je2xad_X0HuXjqj3&G%P0ceq6$P575#Tzlm%s^S6p& zyow@wXh_0)v5=~5a1;fh*iKSXaxga2zT8GwTKHJv&p}uDhJ~qG{^GMF<21CiU;cC! zYu&ctW-#p^0#Nr{yL<@KK`1qmCWclA;>uxpRi%Y~?GQd1H z`)+F|-a?y>=lFL9kM(|InC5;@R-E{T1Ug9w77tiBB+k+3EmmJ8sE2X9J%pX>xIdED z=av-X%LWJ(Cj3c1{f%(~Gv6Ta8f9^oV#|EyF3G*69Fi{op^)n>`aaVnA<5{(VQvzP zfk3F|h<9(nOLoWAh?E?6V5hn^Yx*hhZcz732YBxU__J{kF$xQ1eP4v^?N_9-&PA6ya506 z6D*p@Mqz#IMfei9`qnRoHa$72ADAaC1vA-1#rZMD2_HDo2GUd&{6topr>%7K)53)y zF8WFhaA~c&ifb-EvtVp4eI1VUg9dN@UEIbQ`mTkelc%Ax*P)IaC~$)mta+br)E25G z#cqMh;s}Mo$o?#0-Y8YLhOA$0jT=4=Lqi1|Ur!uKcN!e{x}H#a@E0TUmS-l`Fs{{( z)@ugF7821Iy7HQbmNtstM;ARI(AIVCeF0c%!0TJTc7Kf*4Sga=^)#I3pS9V5Q>&I$ z^LPyIauT@u=sQ8d!4?qP6(jjLk(AdgM(A04@#{br#|Gq89l^SB{0Z{%3D`gDmgi(L zIPhLe>dy~O938c--lx|)ayD4Y%3pktRkLR>M_gQb2J{|(;)KzJo;fvX&}lQ`GX4c| z6X6rS%(DU4NOeQ3mSP)?k#5w2KdP5zBFx_>K63U9nCT9N2P>LK{+M*{iS*&OZP(~{ z!OfO{0S*3?dlank>UyG_K$Y_r%)CICeTVwL(JC2WWd-D-@BO)Z|M8fUmo7PZW)g2~ zm7O?|(EGDgCrYW)2y2V6gFy5DfNqGyWmX$zx>V$Oucy(OsbsRkVZ?9^^UiDL9GOFr ztWYo02j4vlt8`WyfZllTm(&)07Zv^AQaw|?_{S~MO1MD%!0ZCW8wZh>5;b*!1!`p) z#xDu6IwAwfin44BAhk#vYE{4t7P}bm_7UEbbnd(4nt30Ag3g&gCYdGJrJb<7K#klE z*Xw2)bOozYK)({s$;NEeeXxN4H?s?G)rh&jTA1KBLflH7El(wu){W}po9wv2UnF`Z z+(_YA;slGue6)q4PHoAnGmU>w85Dk*RyXk$HOBkFTw-3`HN^-f`u?-{&bD!+GQ z$ut6%;J6*i(GlT%^aI$+Q`>^+{6uPg?oMWW#=rDmcoSE_Z<{ubcqK2JnO6W?9)@zyBkhExa~-g3=(67rn>)9kArC;309euFSbh}I`Ns1^z8EbrmXQuU zX?Q~CB+7GgW-2$JrM;Ff^vI`fbV~LN1z(`%wAx8+T!@d84E;6YKv!~$Gp?rgw0^bQ zPm*E~|6#YgUSOyliElP2y*r2y@2b{DrhHmJpf3A!2 z!#cEuJO~pSpUK8)sTqa>T{o4!;+j6!{ySQX0c;J-Ir76+gL0$6*HY#j=QR#7MRib^ ze3&v>Lh7YseZyYO9QCo?sson%XO?Yt03(GIF`~*dJ)rkXJaU|U2lw_M8!oJtI&Q=o zaylVIfB4Ri0{JkBJqoyKy7rP~uf62CK2{1Na$k!0#uT)3CO0da6ibIzm)*E|8H!z` zzlnVd9x07`lx6UEHnBAw^zGJ$K8Qij*@uM(kW6<)AnpF?>B~^B&azLE6>@ zdlSU$Wi?1DC~`!O+$5_?w-N}ub9ephWMhynX+N-YnkzNpPau#JBGnad;i|7Mk@>ve zCUhz?@q0+VKW^l8AKDZxJ~alBj`Ce?;=k#2xK9mPSlcShT;$c6za|OL739?`vlWj$ zxx`LRx|rgEk6Wcvu$=cXiIncfNw(Ag+k~Q#U+n7R7q4G_F0`$lY3qHwSwFV#CAH(b z*2<6Xzqc>q*ax(`8{c2E9gZ%MjFW5OE%Vd`er){|8F9rjNj=$gIlA&ZXAP%|aC$%C zW+6z?6E~TTj{bm@SJ;=s)1{agzIw=D)h|ME>-g{hCJ&ti)IR$2R<6vo+QslHnS12X z&=zXVVcx2Bl+5U-(w=76m0yk6oU?hqizR~!49GMN1j@NHqxcwmGL7_Vi#D%B{};)h zpFY^Vh`32y@+p&Oj=JcCp~fS@NGhdT2(|r{`9fnRBKQjI$_MPvXmV6F*wk;R9Pu zT0bOx!P(a61|IKnQa9a1Sjhz2^5;Z1k7-;qi8YNcV-N#*zqC|zihiV1D2l5qZdfqcNafDha-fq(%dgB?$VJsJnfie#M zVL;RX3-vmpqLVBADw1fVx*Ibz@WljCEhVzag}Em$*tjL?P$uP33SBhs#C z&9!8PHj6+h%=Z*Z$L}H_l`wm0?q%vWkc6LRD~5z#HN>(HcGN&*=+CogR9tYXc^wdK zqRS4)-FpQ;UHK6g@bQ?QB{_QeK)kw@y+QP+Yc}Lm{uFN$^8)+WV+>d2_hb+HDBQ!` zODH?}6mR`xJ)Xk6wLO*1nwqN9bWM?nMt>O*)!=1$+K|4VtPXP9mNhv|Eanr+u7Qg~ z<Uy+s)^_9C(ZSzr{YUCx= zotsTaFdSUBhevmGp4kX&vc8Qw6>u9$?&FjmioUrHNXD=gH)IsL=oB+;nATCA^VHD( zw=6`BxR_M#pj?&8l9$GpE|cBCTC+k^;?D*&%J*Cegb=29m)C|3};kig|2%_r5wbz5MvhaYICUh zoD?l7NN617jDPg6#4PY7e!o-qbqmFQO3cHq?{BvWhqzaO)+@kno3tWR4`G06Ihx|C zFWf(`cT(Tc(I>YPS>-PL{wcUO7G|K!*eZ8fHWzd6%GKGLmT$Fkx+m{6arS3|&Hg{s zj^p^|8PeH=uSc^{v)lr*EDS7%l(<+QtwoIuY1b8_f{ zyWfKO9dLkB?guUBb7KuQVg&H!ddUGCZ+cSyv8B=NJ?0p-adqzA-#TB5abyvE^6s4K z>$>lTHCB~@mM3hdx$j;0JT+nH(roex+y-c# zW=^5}`Yib*pvO>~uj8!+T`aPoDTBUhqdWf0c}`}cGNJ_}xEW|6_%BdlyGJ--3HfQE z2@Cn6Md}y%oruE^w0#dc;444uMq-nM9Q-j4uB#CTTA&q^0ws>0in&WZa`QfVhD5td zn>4`dZJb*S#47pm0IFjRd06T3w=1($?G^Js4x+;2=x5<0aICi(_@*Z}fH%C@r@ z*ed?-+wjV z{NG09gLZOqKiD0&5j|JEJor(v;TMx6Z1J}d0^MfPD`FSr^CfR-IrGQF?PbMX%4ePA ztEXL%Wh43;@mF%c7F!#VakoI_vPBE?x&kyww##hoax>oEWKB+t=ZUSV->u>uJ0dpn z+c5oYU`g&-guSax>}syfgoby*Hffrr^AXknNDk!{G0J0mgP| zbVW)X;om-^@BUKHM%X5=txYF)1Oct-{NjKO<8F#W1xW6z z?6wH+3oVn>wS83AL9C}_vo3}}Z9l#*@G5oFd`@9+oqwgQkDe*$%vQBvQf^a0D5X^a zB#PSB1rmw*^W-7A-IRuNK{AuI@oz1}0hQWw=iezf8*ydtHLM%#Zg3yiNKaMTsw2>q)TuMlis^ zlqhhlhb??Q8-wF!%1Me_VBaMBuGgcVbD`iHhSkF=Gl&w?UcXPU%%cMh4#ZAW)syr z%Z+D*ke72_X436Qzu;Gr^u_TL3+?VaB!`!URir_>_5QcyCkbRE?BB~r&eAx$qO(Ue zx}Pts;}sjE`l!|_zLYC2c1A?xL%&cdUESn1NDd0L<(&t&2!It-<&R=5)hZj-VRNoJ z>X52tL#qe8kiM0zO>-Ny1;RD)HiEW~yJM_?wZSU)m|(^^^Y!FUmh*+-UT~g+;dz1} zD1p!Cyz3U%{Gt3~m}(q2c?lwpx|4`SG`Gf8MOaKs8bnruK=^2A3oGIFqJJv`-keYF!6>i-&AQx|RvJ>pc8GGjW?1x)g1T7I+JIP`ZH8`);}V(QpOA zOG!xSs>%p;+WA)HV0 zA!FLPF?!|f&%tfewfuYHgXFN@F(zjLs_RTtk^d-3RC+!b^f3teZ=_TFej78RO?=If zGYnV7!#6$;=+J&hT5#mTVwdZ;`*R?VS)2E|s8V0a-j0+uQks;?vp#grTQv>eQ zh8^rcsIz4d3gnV3k@iO!)RmHOeLpGrodo=N3D+MfUAC39e8IkbWTnX;>>?o2D!_sA_TA(;F#c<)p_R%X=V3JLP-fIJh7cufwei6#HU92apP zvKs-HF(`}k0Mg1ahI%r%YqQR1I*h->M$Mmydd zO?<;>B)>!Iu56CJ!O{#u$&=j61KLE~w%OpmfA4k1A=d(@rA>Q)!hNXKt7%DWqt3c5 zuP|s9p=`WPGlhi_)z|H^;R%d=L(H1Qm2T9W!Z;*7*jXU7UPsRg#n{MWCS>L;K2h>J zd74$Rdcm|^$*NUX$UlQJ6J*DaC-?UCCea8vp-fNr+^*SzIgUb)=a-hAK`d$FCC}qnb$f)!LT;l0=Lna#6O$eJ(fc_oDC0LcWh-bfsj&vxKHq+!U|Kpg^gcqnE zujILBhgKx!wC%?-E7;ZNA;UIXSH}yBsWYkXpOI3b@(twT=N#|#2wPWvG$E|*L!IoY zjj9J-Hl3}Cmt>zKRl<{`!C3-tlN_$WUmD}vwX$my%sT-QGNO5_rJ}ZOpOd}c5bWZ{ z`=S$oP@|5DEqVO8VPV7ul-PicA7;zB#$njWqlGJ*;G9oY>>%^s>WZy)sgJHTv`Xu7 zFIV*tZ66SVDs*VW@<$@hSx>leO0)I%)!KjSo{fpWEg0=J6it)}(1V<1__K(YHDF<##B>bCYqe>bV&gvpGxp;V&o4 zWjdpMZ+{}QK?!oPaYkk)IeObitWvNV_am0`N;}2a7-o~$0oH@FptlR;UNmQXU*P_O z2R$mb?q%mx7fI7d+y7(+b{_j;lT>9RWV6gJN^t9=&(OKgE}`OSJ&1k{3HIL zr`>f+xYH0=c_{Tjuy+aHCZ&x7WcpZ{Z)ZNzX!gNC$8a7x^R1V zH6|y?>xLS*nXC-tk9Tj=E=P6W1BQB;NBGZRqK5plvsUKrz*;J8!tn`f@2JSzeVvz1 z6K6k^E~T;9+?xSOd=!6^16SP6X|Ui?(t^Fqx8S_>{~hK=;Nhkpf8m;5NGZePzrWc) zz5eqwe%68`EWur5n~Ix3CaZPz`2Ldy{l9kr$s^pYgn@lT8^33`(`!jpwOFhYUGu=*IqQjIr|z?7fR z$>a*ewUB#}=(imAA5O3_K(Nn&En-q{|4I1o=~ChOp`lcaO+_f{rIy$bE@o^%`}?mP zzf8w3$f+A(@g^n2V^KF^UU8P7-6#U|VWPA5C_4K(GCHB#?>&wGn7;ih`O}^t61pN& z9R+8j0k5>uAy0;8(iHppTwB0RB#4q2)mrPCsY3AfVsq1v7VfdgHv=p5!?b+S-CE>} zTHb;)O_oze;)Dw|B<0=BZ+X8j&2;pF{ogXg_o8bEO+1O?bjE1&IzIP|%3wqvNQKx*Kf{|);oQ2BAH zwH#;)WJAeMxpTXyiWokwse%2=i#<6$cm|v~Jo;t>G0V;t)e|$wAqagix*1;5w@U2v zVCWWnFAzH{qb0~P?U}r0TEfZK^v79Q&o#rZt%&MEQ2h&7{;`J7hu*}?y;Y& zdHK)4gi(XW9VK$^0{+6Y$4^>S&wy=2CV0irD_v_I{?g7Ua|-%=92q3XT$&^d)RM{w z8Z*CYD(0t3z)`n|+|a^P@qFAB>~2)68+e6Lc^CB_69 z={~M9T(6rJ0fW1D)AJ1;5BGRnK=NMUr=AHA?lL*PxIyPb65QrNy0USad&;nG}0taE`qQ!0s*pHO8}48;>eh zQDgyJ4D|s%4m64ZcL4f;nu8NXoHANZNkMUeYFs5L?X|gpYUAsRq0%;*2*%znRQH=I z)RqI2N6huH(Z40G7yBB3z-spiM$9D@?v(mN?FfLCtWBmETmG6;F`759n`pK>7PK4gT1QH>AhkRsW$MpQDpV2R;pAZO(UtUo5`h;P9&r}7_Z-St-o^eV zADkEoZrG?nmjTd)J33|J+}94_QUi=N{bHvsiWQun>h@mVwXKuIp^oj_<|~ae(iv!k ze;@Xf}BtIrU;q)J1nUb- zTtv?Ugbx8B2Y14W8?6%8lPW81O)1#ju0gpHx7uqOqHT?kiwm;V)zG-UPd?%Fqpv3D z2H@_aqPmH9#prV#QzE*E#_usUH8s4)mPGU6C=UGdP7=<*TES@w1eQilPC!3=B&5UB zp-(3`U8DW8zRsI;*|do)pY0=`1OvJlnVJqQMl$lTy>K00tOoBMVy=OT5Z7$Z8f-W{ z@Tq>qnN$zDSq{}jrCCduA(a$B#3f$9Kf@`MEci|V- z;qPgw`+Unqzz6?dP<6zlp3sN>wT2(;k(+$8(^CkLr2L&Y0ZL0Nn&UiA(zFqz(AlxI z+ifbIJb6-F$6I)?>%+4VEK>>H)504~(!Rd_vGyTNMWDCOLPEcBE`Nqdc!d>MU&)&TcmQ`QsOiLt}t0fv+Elr|Wfu)l0C7LRLz%Dmm|bWt^33oq&({&>D|orl2xOCJY6eT^=_CFz{FCn0M&OGp@&~e` zV4w*OgCP_KiBDyM2SdXb(lRXwZGg~$XlX`>dLYj*tJ`N_pQe2stf~uAET&vAf74Ei zo`-4tPLaf6u6BoL;XO8yN0n3*e1|(GO?yyG7<;b(glt_$eBG1%SExzseooGGXmXloy;V*B8TwV7KHHg> zwNv`{|0x7*w;5hku%r+3biG6dx+alW*5R92`8oK-8%lm~yiG>1wH`C`iOHghW`o9mOD5q&J@v@YmDrM;pS6-d;Am>`}HM0)(n~}u<$a%(S>={ zHkp2&`X*`Dn1Z#g_A@GQ?!Q+{+jr~_8lQ&$gC%l49X_H##K!M8iu;5{l#nGNmqL)PHMHcZ|_urf^> ztZt&lee{BF_N|ws@2Puh6hgvUpXYYeYU}2Sgts9QJwc7>ZSa-)X~6;2HX~Gj6zp>o zOEEIv16PeWjcE`6n&IG3uj!}v&6<>h`a$TTcXBXCabF>Qa45NrI4Yy^c$U+|*g1&q zmt$kxq|Pi2KGxheI1ATLA!TF;=RSvGZ&2P1 z;#SXvEb(kFuOy&!ts=R39Z@|Nb@jy{GVjwQ`P9vI$$Uan`osGV;po)<_I(*kI4hD| zAlLF`!1V*52Q2Ckc6^kmq+X+ z2C9!>J5w{9+{zx=yY2#eHEmzcJ}ft2U;UQqspE6vaBDap;{i`lzj2hy#_~Ljq&{Rm z1faMR*r04NkeRPn`7iYFAT82QqPHQ&9<2JQpZS^rbqDU1Z74c7?Bx|=IYYIio4ZpT z+Wb%kA0YXf>XaFfrMq$}vi`&eXYm{2hZJ;ZXt zzQjs5YNUg-uvDVwu9?+>5z;_7>E<-ooSq8m`?oFDlWF6ZjM{DGR54n5_m%SWF^98W zq`D%g!joc|20Emx^8+zVKtFpF5bEorQgRUs}HGh$R_P)GCQA~!lOmHdx0Y?={+0pVi9MTE;}?=XFBBaTCRVa z-1h-&`J+I~%(!#$f&={{coV`8uumB0mQ+uS(i6fAy_ev>qY}$28ZH5Ak^YeGjN)SN z82}K34Vq{o<7`nkbHP{L4_2y|-{Vs?W=Rp@OX{?t0evie8ojG@j~!OPdIGpy>x4$U zHea2^?sz~g-k4KNxRD2&BU|wRRTjE1FMc}YhgP~tU-gC+{)o_72z>9a_aEf%;B^T(XEW-|h`^dM0ZZXA0Q*57GgiGfLJ0Kj_U1H!jPP)l%PcPGzSt=MzDBCE2}41C2{MJs9loWclyE*zOYhaf^|qC-u;O8@ zw*Z(9X1QlgjuL(VUR)BLa@DG%+=bC+;@=l;!Q4&vM&Op&tZc!rOYQbjrfP^sC%y=p*j8Nt;(Z@rEBT@E`FD_foAJYI2(^U3(ij zntTS_e2iXW$ASp427NNtzE+$A0aM}wIBFzCzQYICfS8LE;7+;Cw#?9{E?=;wNAp zBLqT?!PZD9$bD-k zi6YF~^P46bpkbks)k#6?g3zEZRI=5Z*Sq|yHY z|8*AsolN5|8O1tGE>i9n8^PD?XT!To>My-}RvT2&ssnpqS0YM4P zju$|kkAzXiZIWJPgcNRH+3;un-%SJnV*yJOnq?q9#ubxMb~G2)@o%ZjWEwr z)n$Wrs{Ft)n>3D*eF8v8Q;?lgIQwR+w#ZBhwPKTC(SB=nRyul@Ehp-z4(F*I9-ZIU z@_+4nfsQ;6ma`a;2r(0x8J5>QrN%Z*{}@r)XAu|+e9;xR%u@I zuu@_2qq>*n@h8cOFSB&5@uTCv^c5RN^SCjxBV3B;Zu71Gdh9mmbe%WUc8y$<=I{az zYU`4(2sUlRf|X^XS_9Ek3l+Wn@@Fld{h>T@o=Ivc@wjAH=F!&r{@kb%=Q(yfdaoi{ z{fc-KV@w$1%9b@6SoiK79<*tDiKg0KrFKUZWyITTrZK88^rveLo2tJtW}%h;VxThw zu+&+&#sE0T5`8)14ImAw{5e1P|DeSq+VawkMZ}~i^YGvH_X$bXpM>*>q8jOOy_Rxf zBgL_IRj`7>>|3m#@1pX-5s3*sGyD&fXTkdzSKl%>p{TY4i|O74cy}mOe6}YJl#f3}~J@lrZf3Y_In!Xhfbi25S ze5&y2VQ;)cyez zwT)#=w55k#!AF1C%cfMhdF*x&e4pEdH(2qmCad1}%aJ1_(a%G)l<9dxip4TORq((` zk(qt9qeM)j;rl8du}n>$DH!!v5B<4*TU?E+hWnn-o>j~DTw%X;!r5yJ9^vvS_r89Z znc72s6Xb+`{}YVv215`3G_2PHl7RP@S9MJ&&!5w?N2jgj zz^REClje7m9m~Bp0}VeFQ*X_Y490N9{pX2taD^_g2Y=a5IjBgpzXZIRdx_HN7<4WRGO+*wZGvJ(RXgE8cFZVlus z(YfTT@gI>u@hTMaKGMASyJ#fo{kD#ur325I7<~qP^+R;<%*#j5=47+Z=AXb%YX-d)xzxiT7sQ=&fp73}KZ`|!A2sDi7J~BIxmN>9 z!MAsFQha8VoU7eFYodWtl@^t+0=xN+Y4R{U`?hs$1krtg%3g$0zMg#k7Px7t>>YpU zBg(bPh*e|sLgV(VI}=znz9%<-;a8SlQ zIX?s+c$s=s-AG=RBH>45j@aXwEPS}$6TnCXus$!Q@@K?H#AjML?F%Mp;Z#E3D7*o( z5OC(;W9QN^pO+(*eOOK!iu_03>QpX=->;{1PZQm=z6{prUW}6cpVg8}0VCwa4ML>G zL9%hB1YE5ch(Z~wmky9#KYr+MgJ(n-Zj`)ykVBT)=?AZyZ+$z9K`cHV1<-VCY+51O z+yPwg+71|wu8AW$Cezn^N+&%vn^?%n%~URG{xy1G|5J5$I3 z1jy^7Z>70}hd-q4^M7rbv02Nhu(Qz}Ssz@CK`O(~+B8SM79C+j|H|WdY@v|Qx06NM zyk<8|Akl19$9ND>A(UlRS<9OK3`u5 zQXv7f)wmamw0I#v;UOcNiN%5!q}99ny@XK!LKagqD=$!h2)n&_eZ^pQDjj2lC`;hc&8KDmpL<{`!}$qA%2$ZLO_O zw-?BI9&x`6wer8U{sSulbxokjSYuPuAilvYgoSF~8vx`8*@YGP`!HC#t_xylAS;V> zqUMs1Mt4L{;yo&7MK$4lH?@fr^>}mkDTGkf2rzj00jhA7 zCNMFAlBFe-vc74Le8(TjUfWi(BH|$1*9AH0IErLhi9eh%6gV9*mtIu4cO>@xxu$nh z%g68By|!r5#xXFA-VmjI3T`SM6O!d|mZ-K>0~)rSJwW`$6tIB$ex}17;mC|@1IMN8 z>amDN=Z=x{#oESS(+_Ld85391%ZhA%+QPk4JAXh9d7JVNIv1#|Vm2=V(NVt;3|<+JCCpMz%d zMH49FkX#4xMsI);ry1)YxtfvuHUB|lYV;(nq2%Y&*|TIUUT$pRsv_Q0dCR61=e}J6 zIdUNLSTu~U9>y1f33xC*2dY{CuF)!S-*YBHD_;k9;^jInMKVTolj)ux>FqVhv^;BV z?+?7j@b}mRB@dR`p*Y5ANcul9q`f&fVb6-=cid~ zJ!UN}!?_iQZr*?ljNdmS57ksEav2S}L`RKKwmoLI7qW{(%=LTe#254Dlr-;j+9lGu zo9wX`3-bWEV^n`CmOR156lWmC*PmGTr=9I>abvf>nOlyjY3{BH*?4;3&vT3m+7z-x zZr6+HGDQ04yJm7yUh9`TiKkD3L0@c|Z_h42&saXX02|U{LKTCQzlvN=AUl8He+-HN z)``oBbs3~LJ2I2jv6HEns{Uqq0EpDE9hU(LcIm~UK=;$k9~oKipFyvHsve0!!Fi?f zNna>iCo8VSm*zY<>;Y}F`NRzELVwKV(SM2(2yA=x)H$!kKWuCxj#?;oOslH~W7T$G zA8mENuuF&FCqLYUUYbUl6xeRbqjX8Tk>Fnv|1%>A3nUChf?ZMQ;P__LvW0!{ze0qV zaR>?}_Z`4=J>geXc6KACo~)AuC5qJx_P$OSLcMu9j9yzpduG~*{ug-fJ>eYC{sCH! zr861BY zfYBs>(=`=Izv%s}%xmkf+BKve3r@`|YAi%nou8U?Vg2wlZB?DOx-Eb3mlBnt6=jUNmKM&4K3+0_ zHbUf2$Z*c;On2Id9Xm*ieMbd+WyD)WU|Ks1YzUo8pg4^Ie3c58MX+qCiwk39>Pc;~ zs4((UyB=dMOfynmJMdX*4pehfQ(V9Ui3eoyHkaw0`|3RDb2}HKl9WCGrw6a*7UN0| zSU=%^{S+=Y9Gy=dMmIi?^ioD#d}&j2smCs;wYlV)${-awVVf zHGgU5KL8DEO-ye6wkx&?r^h8Eb2-kZ(Qln{IXlz+&M3wYsG%8pH6smpqt2`NjH#@N z(H(lvP-yJuIohs&F$>z|mfqY-)%`GYL2h4L^G>i41iI873d@h6n_l8*bDeKrMaY4= zyGu4Vs5qTFz6o#u0M8+!$17^#m&}cCB*$G9*&aNm9`rCU@Nt&24f`}*^F!`-MTAJ! z3|*RFj#Y=~Tw(*dZGpcF&>n#G{0aKps_e#6ogurW{!a|6+sL1`bv1cN{hlk8O8N8E zoM>C0nAZ^?F;OkH!{gx#+5N5RqxQ(eZ{PQ{og30R)6R?`ez!Of>48WD>#GBfi&1BI zW|kQL#g>!#mcdSiXs2w_EQrz4gWP?QSjxCzn3CeCCLI90+F%EgV$}Ot8!=V_*j0e8 z{u&QqN*&tn0#MXuz|lfnI~llX0%j108aJiNpVqKkWv`begf|*lh5zq5h=r1NsVIJn zqo=y)U6M^FMS5Kg=%GSP^(oTcSuHga$>{Yut6z6;k{*>CcF=fosTW2+TDQQ>@ zyyO}28`O+3EBC5!41=R5uR{;{;I<6iwk{>vt-BjDJKnKILkwhpBGg{a$D*hW(CE*M zjn}1Wy0&J=_&Swy?9wRs8nQ3DtPf+bI>J*LwQKb|WkOOz9Fldk7)*kjUbs&*Wr}Gf z8KJ+KdvV6KOERri#NhYI0%?QWeY)L%m+dOFy{54L6W!`Ta6yijzqt2F*4GwC08PLA zYL>bDY6*tF?3~1_npEA`jsgm4Mt4SvKHzU#9xzSvyjBWEsHPK=NyDMe!S5+2((f9+ zqvhZGZUtv#5F+9{1WRO-HMo{h=Z_T zz!Yd?@R;mzTVH@Oq`zkk1&?%xzB$VpQ)Na8fy*cRnSs{{-4o2(V|l8*9NdfJ;&GcA zASR8W^sSOXcXdxtjV;OVTtXP^ns*Xa^}tl|B(Za3TYA7{<#vDxkPWqfxCyKbt4A64 zPKwq~($nK54mk61a^?`%+i%E%DuHs6D2(yp_Z=+L#SekdZrZoX8tBV+WsTIxbA$$8kSFo;qyJ z-6!htNB5}D&53(2;X^}Icjl#;u9hF$;pbl<{xIJ9p9%R>T2bZVOxkF_t;fN+BCxi% zl;RSMU+FISJ})`xHddFuhYMfUqG}+(Wl(tTpTAg_GU^g8j{Hd`C&8I8OlAqwOpDR5 zEga}H+j#~m(FQ_i)$|;6aPgMlNgd(%s0maR|MDP1I3q^;;c>}#uB=XIEA+D-w zs##KXrI|n08UX(j4`yOP0!wAzAuNy+`=lB$lcFbM&=gg@hv1!EqC&~Vnxhd@)lu@6 zW?|}VEC2gvL&cGd2k38bDRNa&@r^DThin=M@pmQ(y%&IU3!pWvqIPY-@Z~J2>nHK9 z{;53nAW*Ic-MB=!Tspg;3TLcEX=rG`ve#f@wVhmB#Q(ZuT=+ z#3VbUg>beo1>Kd%$%?Qe?_p6k6S6n!+HAX4D*LV%{9aN~fx(6z3BGmi$N_<1spywQ zdD~>3!+y58Kg0IGK*1kol_=&I?g=29Y0bp9Wje|yb^x&FFip_frHy zf&@)X0f2KzQ*nI-q@1;vifN6Ra4;a6m{clh;X&}fpW(fzreH7Z(oMei4PU*KYWFXs zXG_>(J4Q=+O&!z0bzQ4bvOW$;;Qj>6+0Hu+mS<*>Vbmf@ow74BtpN<(4gB)fpGfhAZ(16jB66wc`J1ny;6(-mgul*y)Hg_^;2 zqq|44UL>~oapaJS?D7}M$!8q<)(1i*cM?Mz0&Xrp-1!pvX6vR+S}Y$UCzD*2n@aPI z2A90VcY)9+cE+D!?ucJw3o~VK#M}QqxxyYL_WI0<``Ar&MI{<*tg8GdCMG{AEX7Kn z^0yIx)u(5So%_)ttCalHI93eO+uEw4dLFB+A!o~cVO6BqiL3fsOP!&c6vJrr>Wq5r9V%RV>s)!sueQ@~jreth8dD_yj(r=R>1T{v|iZ9ch2 zG+kjFS1mMOmR?XmR}|F=4?XY0F0y{e@TqH zRf?sWXZ>s^2F$RDt4Mq&obp~$LM1h(&OgH0QuVL(i)uRca8u&%$mzsy-|i{(47 zu$D!{}m6KpEFL(>-8N~EXHAwub=74~E9P0jJ!Fm5#?@G%zfiX3lFa`Th zqpCuOWF)U^vX`AU#CRve&$j08m&{j7s#Dwfew>*g*tSo9r=f~HZEF_u{K6qIkR57N zrnf4YbY^KuHrrYM5CAO5^H9OUfk-7$D^)ViG~uff$^|jNi#8-+6`}O6nh_R#Y)kZw z8RFz_!&|FvPal0myuHmPT8m!x{(xU=rKfrMz%;DnG|DV=OmsM=rh6BQwpjQrAQtrRM~=Bh za6gW@Dr}r&#!*M?PLTI8y`P+m=N`i=Zf8rssb2eiwD+^<^d-8)Y9bJuS!`~-Hk}>d zy_!%zhu`v=gjtOp0%=~cn6b9dF7iLsNQsdHKs$FUCK6wKxkbh6jfw-N?jB*|Xn(Pz z6-^HzE^G1*+=l=2tPDenIZ^9>1FN6pKc&Em*9Ro`bl?0WP)v~}&)4JPIT2v^A~;m^ z+aizu0n%g=JreboBU|Z$Sv`|Ut$o;Gl}PpdsH#;W z&-K>4bd0EGDJ@11eNc)Z!>vfn{2BbnZR&09$jPxkH2xc-AKzB^by_j8|I`(<-E^pS zU+cTotL4MwBT!&CkhRbx@{ei#8r3Avp}#(Xsea?6%Y=P;(vM12LESvw8)oM%V(|@> z++g>|nP2M03kqGk>FmI_(-mY1sHZTT$dR1ZSWMP;ilx6v&OBZQVuk#}?)LlzDz%5m zT1<)PMMA%b_!+#ZJq@+3pZ{SSTA}m6Hf3u3*ubyLtH^^>8Du?+YVwngl5H6Nxo0ce zKS!i5uqW^e=fwK^7@xGF=9L!qa}TR*uXUge`HfPMbgGEVZI}-2vRx@tf6f zC2{cS7m~(@50v@it~|NMhDPzXR&R8MKVa}}FBC4{m@lz%JMjSxgAquShKjq`COQ%i z*uuBzi`5Jv?#q;F_z#7FV9k=sSi<0L8ApDKj7Q=xvz$a9z7<{kzC4Ji-}xwtcuNd) z5drp<`4;THIQo*Jti>_Q`(R`koArx={7ibsOSysEd%ElL<|q6+z1A<+ zY=<_mE+a2a+vMJ#$skZd1CX&a%;O0G+&tu9i)_n?6lP?@I^&CF;$ha?UiR`F(YNEv z>1Y$QOJVC{p&}Kd2d6p57PoF(C5`$`4&2R$w1VF?w`;Pg+}6{FWSWsm&XGfW9C(X! zTD{T-babN|PvDUlm4X8Ks_zjg`B_bI&y@KZ2fLm=$bYQjqHl*{lDNklKdRDq^zSUq zRh#I~X}3Xoji0x-KL$eP6XK9Gy$3lGdyToYvlSvW6;s6ze2)AzoKJqC60(w*>8@{JHePD7Ltpwc42;~EZkjI zT|k^*+Wc>^pCbBColOH%Q!(*Zv7cmmDrCT{Q3*NCxQfiaU2Jzk-O8jF4DY`59dW^2 zU1t-N#$PTVb*Z9NvAisW_c}t8icw_7xv^3a7`2SSQ)Pv&)!ppKdDJO-ezqT=efUdl z`1bWlULN@b2KwmmP9YrBcq3r%v#(YbN*CLvZy~^&h#0kI-15Mq7eo&_$sw2&x^0e7 zKeJ)o()59;FkY82B?tZH%%2r^F3NNqnJatop@muly{I#GYg0eVs#9feR(nOdPLooA z8S#>na1W(8B#UxlW}5cyTb6;*Q1Sjxe(F_C;8-nTJ+V(s<^4D@Y+afS?Zi2COMvyq zgqN?c@yEtd8azqsQ(w(DkE2phHc4P#15yGCFgsP&A={Zt9B3=17n= z_L(CraUbMjFJ{uwqc$m13e~Pyz^DKo#?RvV*v3{?9f00i`M^hfzi;aF5=DSOF83%e zZo)Mj$)Pw@(0ZGR_kt*=_OdlqBpPZu+$U;D*S*biQpI(SxclR}UB_eaMt#K4Lg3q_ z6kI!A?PxactZt3?j#lc_m|=b8BnjeO_0oLh4a@$-d#9#FyBJekbY$U?T$^92Dz-?# zrkJSha7lAn8qk>kH@tplyhcnOZ0kql4s`|NE%-Ikxs1#U|5+Lu5FFRdp7 ztu;uaHs(RnQ3ow(lZd)LGNzVF%$F2nW1 z0^UHOTgDNp*PQ2Aakk>yM1KaJz1KQ640ph6#=G#Y(OV0kt8BU}XJHHgL{cmBa^nEN z>T!oFZDo3c!Cs2aV$YW3>; zC|>^M0%cQ}DfU{dL;n+SFH`#V;Ct-}EB&S7BCfW+xg94S+UOu{g^OK*@O!v1Yu;V$ za$~%!$0uEgM2b9!ThO3Exp))3e^j#m8Ydp-DCKC|mSY@%&xZe>fm;vP<-^{vIveZ^ z0XJT1lWB)b+BM66nnE70=bo;=$}=UJ(Jfv|p7XiR30^o&3vEn$X2Q=h*kGF0 z#=dUF+5AcEnCeR`p8v>%=EQPSs{a$nP`hUZBpq?(-L$*ZkTp4Pe~+F?_qxP_KZ;#{ z*cDH>I<`Kar<5iKo{;nJk#{bs*Tp-6-M)moA^ySYDXce}}Pe)P{mlhDetI}Z6!HkkNAr!qGx^UV$^tXFB=lD!>! z%9>S=8Fc~P_vnw0sFg2AHxYf`DF-;j-7alj=^@GiqSCm|mF<>mbDwqlf#~fXQPmqL zSrM^H@lG^d%}G{Zhw!E!_^!D?MdLrR6)8>}W~y1#)m&s3eZY%|V+jXe%Fhi>Ad> z$f~5fqO0?Tz}_m(+hGy)(qhXhZh=jiZm$L~sKLMgTt!cP@(~b9P`P)o6m)6n05|`l z?tCcza6UtPdO&HN?*X+~N6Wc-CM3b33zsS}EX&@_;o+Dfa*&i6(@~Ok_NN%uW{V@G zzG<#aZ^5(!vr76L5HrcSgGXjms%f=}1D^bfr$YG@bYa^GvIKhK1rm$daSLQ8qGWH_ z(cCW|wH4e4O39>>7ODywNHLC^$2*i%luStYCt~I~%j5>o;5|)ixm=U4*;`mp5ZI1W z*VKdqcG%k^b=qm$NVSPLt#OF~PA!J7Ppxg%sLfP)sXe(aZd`J5iAi$%7gTHEPPTpT)rCoplKHH@)A2Q?{EZQ zrA(!4UP<*@4`F~V+{oX@+Gq<4bHS1rUppW$ZOI&dkttVI+fP;fpVRgA(D<41X zOb3&;IF`>+R*K1J;phW-$Z)@WW3}Y;^-woGGIQ(wn8{zW?&9?N1!8rDG(`5Tn_>SM zX|b|4J3m0?u3OnVTa!$MZ9 zskj;9)_;^gzB|J(-1~mt(&EGSwyB1h6%}!SV0UQ$vS}gQY^tG$NAFO89ssBxA%@5N zW>$|GCYGyBI&7APu~rQ*B&(w2B3v%C)J*H8z*lXpUu&#)`8F_5VrMhof?k_RssGra z@@^e))G=@wQWVH8ROuCnsD5bl{sPIt35~z%;|LCeYh)BxldE+)4=ZVgMSym%!Y8J-7_Q*0VgtRVhL_y z3OIX=GeV2TJ7Z;uBz|Tz7tahG)8Bz0kjqh8BC#F;+~}PMSemNp3F<~#W2S;j)anO^ z4}-PXS)`WOi30DGpMI|YziZv34}10I0t}~eDvBx}*eHd%u{Qn4Rd`J~&V9`THSNA_|3LW2fuO` z%Bf@CozLb4{cMVvE6lghyYwzaYF?X)W58DTn&PMOdY{H1izji{np{I^r|`+$tSC1H zVkVDBw?iw+OFRy?Ah(vKiNGb9<;yk19c2IUCK%urFUdC;ZZi@lR!R>f zOL_QmP4+RDW?P%L0xM9-_O`LOL9wa#IC7oq0S=`1S9#Vy6I`f?5ZDvFHHi3U( z45xRD0Q9gVhki@y|NbVuL{V&{kQSMdSLC_9-(>G2m=uUQjO ze`wkX;uX4>Tc<_e=cM*k?;y4C@!{bml6i+gJ38h!I2Fw{3<=aDCfBj!w#nG~}-5*hT;F16|jG7mz9Yga4OiTcD)V!<4vzy@;IRZX#+p7%DUvWVGf$B zFq7}axTX()KREZN?Ayd~%{$4C3#~E+o`0c{B_{_s&wp_aetnQS(+r#&o`#F)Q1ScS zkn3`URiw0=dMVLhef*E$(;(HCZ`Fo0c z%Lv#bc>Pi+s<^|A9~{)?vJC!N`3=egJaqbz0L|e+R6YX zfBx1Fo=D&tK517e6f94$WIZvoE(QEH*d>BD!SomYzT;c%(qiP;nTGPe5OxLa_TcaVOo! zuhDpfxG7DpkPdy>|QW;B(Xws_iax6V4D_Iv*#2?c(RXN-ygl7P3H{X*A==&?P9BP`g^`xz-vr1;8jTlVy_Do9fI(K8p z65>Xqbq>fWv6~u8&$BQ8KG6RR#p?$mF9MZBqf`uo?>qc?;4z;ppv_HBFd6LR3x{uM z@Iw^a<*FaAlS?_ps$4f9uI%8E1Xf&c zWXdZ_IbU%OEa>@1mS>wR&Pz^h-#WCCCX4$=$?7rV6fem43N)~nsXX*sj*)U!&jAgE zz^R+;{i=5A1UK}jbxV^tKbJ=iH00&En(>oqJQ*R$4;+fle&JjDd-VGkDBOZ(afcNa z%Rm=>)#U?ptt`nTAua>l_dyf|^BjqS^J>aG>^r6v zc^=FhE}&9Xw*ihboF6-65`rb4Fyb!P=1Uxs^3$zAauQBrbuU&9*}p^o7z~B)1?3!( zyaDuN=BU;;BaGl6ag`3fR16M(5(OD-ZahF4S-F#flk01tZ(U8z>SZsc^RCW+*taON zlhg_UQa7mcno{hbf9jaHR|7HM!U=MIX^ZnCg@@j2PLO%ZZpRh!$M8HW~HkRQA-#5Gf0$;J}bI`$s3W7HJ= zW9LtMwrI#htoo4y82w~ehQ$WF=VlgxSdzS*=O88b~JtGf*i& zwvZK|tG-IsFamAB_XMwF1saLRG(X+blXtoE6Bsk0B#B<&!?en1Q6A!Z!h+Xn*jWy2 zluG_dZ8h=KxwQW?R>2m@TgK?4r_{$Ck zw5_nk?5@&)#q}e;TdIiPH`q1*033Iejby!XR2(tbFj__td{kS7<+20CApku{Qmup( zE7^gE%&pB{@Rb@^Ak=1pHU6_@M)j6z$}`su8k*+@vu)B1#?t>I zzVz}>DNO%FHW*?7o$H4-5u0ZJGM{o}PB_h#Y}So}Nt&&uQG&nNE`JY^K7fg=HnL=I z7>hk^ZEahKi26u07qI#4^?Hje zL)a(DlAif&Gb16cM8D}t3(?D;?64i*?KQ!uPZTq{A||2X?8H60ZICmX{df13iq0O@ zAKqbl0>~LVv?{!0{RT`CLiOE_~6(FwBj{83(H&;NCZIXHQ>m4-n5F=4@rY+=zW!Eei9eL zi=ql(Z4!}UkT!$gLE}{U!Z%AI(`z-FvZlaSQ27?9n>qWD7I_dka$0s@!UgrRjVlE2W ziFAwH_YNB*ojz7`Qd4k=n#48!=-ukNN%BkerCL_)Q4Y2v7=0fT5smbY6Yh%U?ahQf z$>Lh=b_4{(^LunWSit5f@ZJqvE$%e4>z_jtBcAn|w0q;Z7(@4&uDtAUZ_#G*u)(mr z5tj{Leh*F4Y>`gHZQ1nrj~JCP(l)`*&xFZVZCP^KI<@n8>_u})xylM8(m|$U?&Yg|L%F1$*98CmQZmaq|bwszX_p)eH^FKqepey zmQ_`=#Q^J0w&Ce6%Pk*+`WGaPr1$uOQ53s5lFdQMd`D;5&Hvgj86;kx1IPGh( zXia!(+L3N$rM%`ncFgv8M>1TTu_kCne5S)2`SJpR*Nfg(*s$AOKhk-eo_wEAK9Z5_qsrH=XKFrdeGf6(hD61KhhaBu0 zhD{SWp)LX=ysl^7-lH{+I>nr}0% z(N(`Ans1nL-J16uFln}yoF+>ARCuQhs;?e94tDZ^f3=eWTZR50Ma?-lGph@79n{$% zYYw6#77_V|{i0Qu1p)z`P0;7<@2$|iX!!p+WG))B6IHU0sMukHN3-Y{LKO~h>Shnl z<3*E_?rWB>$6JheANqS_-3~ju3)UgZyhq`FTAq^Ym`j~$P5O0BAq!a04EPnLB1Qio z_aY6h&^Md5d|O;lsGPHBjb=bM+2Xs!BJkx@dLEU%8dpkd0m2Rf*x`7c?{`!G8=0S1 zOKLJi&+9oAx7dbPwt6?(D}IuIQFkS7>jvZ@vU83$B4Am^WgU}U+=oWgHTh(z9(YAc zk%~8oiq91dh-&E>2S>HJh1IRfN&XwUE+vsx~ z*f^NI=?CY%l9uw8py?t|+WAy{%;^2t0rZ`vZNA)&J|dkv9=S~p$7=vL(!h@Hl<6km z+!iP~mNN$!3b5#6*{HX4J>}kKnm?z?0CK`(p~gki6C?){TCWeZG6vn-#greT8wf=) zu+3aF@FKOR`<=Z(uP`5MSWc&Z!~TlVKnBVD{qEmCaa&Yl+YTvF#n$XB0w&{DCF?B{1nUR|kV1QdHbM=0jzPwhPFCkjM#ZbSsNBoZ9ly;ts-$@0tx&nxBa z<|e$IScB%9rb83$UYUwkabxhi?nnyQfL?(InzoYhzT6-6qm#}~ z&e0f@e|zA@joYy_!}>HzfzDPhVJkYOB(}7RW1f!BGr!;R3=Z_dQ6>?1A$x$-;{}C2 zQhWAT(sGIO)u?t0QR@v$DY{dSBkpgaPGTJ|2gr=ebr5y#28hq)G2xuoqMlOpmt0q& zqb38up-PfWhY@H5-(J4rYkkGFYqkv_wSI_EXg5QsiUn_^ZG62UauW2=1yV-f{40;y zY#Y8hko3cd=bpvlb9Eee6T?%h6hR?@lawnQfD@5g^cAc<1RCrkXS*Ffe=-Z4t+dA! z^Y90D7?qnj@J+h?yF#<)?$so9IW0-(RURC@4bw^9Wh5b{f()(J0W=fmpQG8ChpW?M z+ke2OthJG+8S&nS((Q}t?@q}RTP+~y2BIwogsMK>;DdZlnDAK_hZQj`1$G(`hL!4XR!A5o?#`qKlP^O0Hb%pbYP zF}igsSt!bSVn+r6Jv>)ST^;HCD$BKvO^3a%&X_ijdpA!Q z;9jR$#7k?G9IC<6N{30}8+_j{RKZOA>mZwu;HbBrFsnbQKV1IqBW+AgaLTa00jd?M z)*1{u^An8C_aJ&(C5p7wjqJypIRt7eEq`!B{=x%Nj(Yw<_TDtL&!uQo2FpGeJ?8E| zDYA3WcQ`I;rfl#RKV(n9;xUiZv4a1*d2}^qSy=iV^%(t4q?~<{nF6RBGV9<@>^?8L}JEY-X%z5n{DvX;p`OWG3%W zKK{+q$4)2H8n;0~SCz}dj71u$>yqPok~?FYWTF^<8I?tTal6^(B1%A zo3dY&Ps~UC-!OlDHf^r7J^q6OVYei zMFcdm34Z;rx9E>kIj9!ugrP`?AHScyDZl?!K3kuY|N2O&S4uQs6&FKr`a1{FNcavs zIPulj?G`5JcIar9of>Gpdy*^^LEvIEQ=TxiQU~MMe9BNtR%ir%Ck|DmrOnF>vA=?t z9v4}N78%x`0Bc7}4;K>!HhKz&-*-@|C(%Tlk;|AI89OvRUS`lvRD<&S2R}t3Vf*Tl z3TC4%a+3h>EttX!=q2DypY8Z18ie8t)Mrmn*Kn9BdG9S+wT+W?N|ft^zrB9Lsg3l; zxyfhzAJ3BESfDcmdhvMsNqc*HVn=z}D=nKMw%AIp?b#-|Kf4$c(Jpc+5uFo)E%e&g z^PG%LUhF+P@KINm%I~ZIg^AbfkxhC)Od+SjsPI7_aC6QjWy%w)o-O5>x2)%yX*n3< z3y(pC)P}v3q4w=Oi0V~hB(E4|S1^J_;!BI$D#?<)xQ4QiTRQlc;&QQWMk@|i=%mn;`4F8BVtV03EPmm*GKlOGyB!d<{8t|1V<7#H4SNS+1IBvUFItD`X@id2SZ~dIh5qol*(i*j1RHi6%buJa z=o4pQeBP~4djS^RzpXn5(7XqM+#_?i@u>PP7e*tFXu?op;K(&1_({_rwc2@LKMxL_ zY6Cp?qHL6+LS)2Ld zQE#5L=~A5qVjkXS;-x)1`e($>rqfF7F}*zK2mAZNu?sp^4=wim#iO()b@j1ZlNqZO z2gi+|rdbKRTJ9r^aYtB2VmKogDME&jSwF_9+Whd$|2adVf z`!0`Xi}hD44xP()-xm>|5w{+=mQk54UcgnbTZFBPS|pf7`69K}8Tw?@3II}+V9F1C zqk}L_Qyv<#=yt`cgVOYVt|mDDth4{t)lVFnaJ8|N42h{dIOgIz>;c)zq6-1}*a7 zW=0fElFr{>uDXe<&i=k;3|N}ge2JwvvUDU%Y8eQTixq$Q92gEe(Bo7&Pw zenc+~->C9)frkgz635;Fd6UV7nNHxtE=rYuUv_Sjpdv$$*W%s zq-GkMm)wXYOO~~xaeG%wphw6XDPoBCGN;vkqBl64)7~(OO=m}b5pOT*5*52os`*L0 zmB86wO1OW37Wz^3?$MIsW2z}U!yzDCmZMSrkrMi5cu3yNR}~n(pM86i&c3rFRjF!d zvmH06)|#(l-it+q?yWUS3Lf>Aub7dPS6ACaO)5S^EmrcT`*w-H$kwGE+qnd%#0(M9 zamP2F?c%UHvPOXa7e{mRR^SeChO3TS5=I=K5bZ025)6Sl<9YK=(1R9-v?-|dO#Rx2 zB~U?qBkpWQT65_~nv7tu7~SYCq-$vnGQ939AM$BW3OQ~E4v;q?&(}tr(Lb*zHd~3r z9Z(oYN}j3&{y#*Wd0b3;{Qu9HGfT@X?aj1KLQ!d@w9O1|xVj9N7E)7M2B|5@pqeu? zDcmsjLUmkRA(=}OH#wOQrN(wuQYVVgGNPKa%ucg_YrFyEd?J4B}|LgstWdBw~4cPGhF#_50`Tg4@6 z7^4Z=pW~KK*?^(4V|-*PNOf~(Ox+xtj`3-oeT~0`4;$RFN!A$44=`(;CVu0kH4r*Z z6YOk&UWw?R)8K+MMzj}o{W?;~I+9yD_*({L6FDH*lDb+1jJ{}|H zVtT{X@arrAWnGD1P8=$e6@ozF2b{c);!WUde%yz6|A#Jk%*Y6u*B55WpOl9M{S79~ zl}t`k7P^{cpzg|Yj7UE!3wMH2E5<>aj!Cd4TYAj;MlTd^C%ov{2d8P;7~GqVj*FR@ z6?uPj337jUl-d71uDO}i-9lpT3}fsc64qC7U_uaZm!bl;8Tyir}NKl z2drF)L*Yr<6(gd28i76L!gKkHmsBFSNnM}^2P%fgzb`ExJPJf_7^jO%h|Ub@7kyDF zHL&^#s+rKGl6MB+2B)_4FE4hH)$vt#Wi!P5q1mDpFC~I|;A!kygL_WeR1l!@erR>A$GJG3<{p4CES2;{n^ZjTq!;my-Y(0wt9 zamEYA<)%)h#(`|`PBWuEBzlms=DX$Y2KzF9{I(-uZ`9lR2ZZIX6bJe_;^l@tKHC~T zPaA#m#zjm>C_kVGEi!sfT1KK6Wb*UmwpaApcLVFIi0dB_*V~Z-Vl68J$DW^GNYrh=u88RF#|XThaB+mX?5f-zWghv`WXGJDd2XV684dU*jlxkZ2OVW(`Wlyw~Vej zEzS#hY@t%7}1J<2+wwg{x|i=~M2M{(aB!d{=zmdCM$}%3SMzfCrgF!i3f4;Gw;*}dE)#c zY2!CuCzRrZV?117a>z8{lPJ=UrQJ(n2G>Yb3M11-W%k=J@-9recf;*JqunWnj**eO z@`ljGKe>%%MQzezX8~TfTc#scEHc7Af%C3TlY#>!oV`GcNb+ zUa&d8fQr$B%CZPFuWy>~gqNy42$v}z?>@rJx3 zo|o?@d;iH=w0Uf)Ab%(OHc^4s_lEtd@FRPUgSZeSgSA-`O(+=k_Ya!i2I{X%1the0 z47uuBx9Jm_K4h)z*aTH<0Z$rGyCm5O%wK`Zbel?&)tNIqIe=dcAyrf%pNMZIt3W`F z&a)OhWZG*&4b>P}M%NlP#XmqZw9M*XmM=4^-ew{e+Y61p1!ycR)M3ljr~lC*-VwFa z@mfaIM)DafVT!?eO4&x57_;Mng=9MD~$==7>)6Wwhm7#jzP z2e$DqqV;;E&%ryEdAy%&(yX2XEbX$nl{iWu5^e|Y9D-i_gm>IMa;h0_!r?NWX~cAw zrmTjeRt-nzh|YqJW{H+J>>3b4yuL*)ZFvRG=PQrXwrCi^8&oJ@$WcnTZ}h-Z)38+l z`;&Zz)mkYW@`3q(FVAt5F5iL3b$pJrWvjh}qEGmnVXS{8itBv_pTTE%uu45}-X?ze zlI~=-;P_K`?QBPPB6n!dgQSD!QgnycR;d`rR$nIJdMd+j6#C)&0I!YbP@i6K5#UeztYW+B?c-7!yiivq_LtfAmgS&fwNjZbQC_xl}c*v(A*aCZ+--Yl31R~j? z6F&_C`xs^ykc@_hO?7|)v=U2yVc#UFbHQar<#4`nEoJccq)q6K1m)2iUaH@*TjH$A zNh)&j5~4C~gZI?)isM9Q_Upf>0{4Q>u5?@fCJnQCiRFcSDNsGCagj?6G)<7eXmb3I zW&Ec5G2S+Je@J;N3m{eQ((5@M3WG&5IWzv^MOJi84lQMs%pXR2hY&gzi(PJSDLrrZ zqUdyCy=dy=ZyGmCyy??dVM!dAOk2RNWDJ|m&YR#)Vs%g+?p2*T)OC*%RR`9wrx#;Klk*((20QLFiU!(g z*!0#pA}L@MYHVo=UAMsjy5~l1{mwkm4^)QfS09fI2_pvjk)6Faa*Vg;*8|;iio;(YZ6BwMTdo~M+&}BSeGkxnBq;*pUwevXm=-4H;Fit0 zBn9Z?ibFb)TR6+b5?qC;LRhJqDQ3^aj%_H84K9|WzawA z1%=OWCR|UN`Z?$bnQG=Pu@KnKa(8&B`TlihUMae6IkIlUo&8U!k5}1KQmx|>lHx=p zyPPpl9MG7mF4>Kp+ok_4je6TXDo#K->C1uRsxqsnfd%E%>z(&iUk1C-6C05Ik*)D0 z!wl4bdN)Cpir@B+hMlDTiQdq+o8&L10$ynQ_E2i zv6wZ?xR#dJO3>&yH6n<_G_72eSA2tEWd?5yAPzb^?wyON<)*6`#A2Y+gIUFX-AF~U&pD6H~5oy44qaBK=P;4>bT;nI6ZIXJK zYikakRjt1QcTtrWM-|P%7mUg2F7>|^s2@@kMFhoLT^&Pr5l|u&Z9R=VM@V zC2aNYeaT|7A^ zS2Pgh@g2_|0V`kVy(IGo7kP0W@MlD>2Q7^&L;U;`P;o`FM3RpQ`Q9I#)rdoOrx@igPwQUfpgT^Vg*r69q_(ebY{ z=-WHUAmvmSf59TRC5#(41-+alG{>yCGmPq2W*Pfzgrj?lr|ji6%DU|%gWmN8eo$Nj zv^)7hQ~p0jU*@;=FMMjD7a?9e|6HoIHor2;CYfQn{-93BN&ZG^mP4LZmRwuvZNn$a z3b#*xP@Xd09KX-_i5vTyPVG0vus6y-y9wPl%Z|4a!13R=EKfSyiE{4|5d!eKxI8!>fQ)keh3|IUO zEwse50KTFy+gB`TW6@*a^exgAXyfYGh$ z8|#qgj?@rs6hNsrkilpOj|r}UVj>&xa;7c`xc(Qg;HMva^9S;p+y##WdyB~XN|(aC zkmb_Y7J5UuQ~3b#kMLi9A(3-1-mxKRK9Dm-TyO9c@chHrEAqR&U)cvB>QRoS&zOvP z+EMRI4UHBuBbeOq<(|`ViAGS0Zv5K^Z>8h7(bjW>_D?#k{t~(mv+UeuQf-*#jXSnZ zh8%*FN0tu`f3B`(=2^bE?Je5w;h6=LP~br4otpO)<(}jnB+rgtp3a3~z&`KI^-dY( zPxPQzm}FboWMg(4sdA_edPKZ)AkrdZ>*IU**poTx6J^Nj3S|Ebwe%R)?C-Hr-j4GJ z{Qca#7Y#F<_seEKVxIe^zp@<_?sYZKyRa!5>+iP4I=8d1*9W>fbK=Ak01!8ER@67K=z= zTVXJE?n)Qz{Q>bGbrRP3ifn+3`9#lj7j<%+jv)jRzdzo9L=;<9tKW6`1`(nr3t=H0A=N*cjP}W zT{X1xAibjkb9dq_DdtT0?WA4sZk+7_|8U|Z5H(9OHANYr=$REP8bIoJ<e9kCSl`ZcI@XadXh zrNs3YV%dyo#>QQ%qV*p*JI^F8VD;dj2SBl~K=CrW?p>s2c-QO(aHWpj_*MV`3KnBF zIl}4G5%7l2{`h61Vli2G>9iEQSe*X~=9RR;;nO+?7l6BG9k+2Fd*X-jPQqfVRHIe$ zu@&H0>rL+14Vl4~h!6C5TE7QJ@el9(zet{5nSTw^iU(6a^NF6~@Q$zT8nAuJ~!)0x7Jy zD@wVINQlc`+>ZQTi4w`g+2D+rpX4b2XN=@{X`)^$+&jB3CyAd=dByt4IGs&6bXPvO zGm$dLleaSFFgz18&K;UK9LDjCOY^Bw<^N@owFaLeJZu1B+MD%0d#IlAtVG<~hKV+g z7Au~=YutBEFU`%i3Zym^5Sj$_U)&1E1dpU0ME_k@J|D)c#R3zK@*CsyUhy}(bPFJT z@dwUn3iAjpmfKDMZ|8!>B8e@~oO&MM158Eu@PfXX1lK#ByhJ!)Rp9N3( zEPE~yPoB^0JaTREzb*R)o#J(WGUiS#O(R2Ps|~N@@+gkd#1Y<279#&x=hPw(=m@1^ z%|4p=EX@K=U$zmlA5iB4WuD~Vz5`Nl29(^Q1h02}_|Tgm)=lGl&{&ra z+b-kYrov>r#s3d-uO2z}WmfJIR^`Ei%)#P&4>Z^_Q_WLIjc}Yf(l0qY&(&B?Bwv1b zfA{0V?$kdY$nYuay;$w2X?4GaAHR-#_8EazDfMqlR-5Y~nN;U@%NiOyY*cBIJFcSH z$4P#U5A|$ZfroC^$~xNJiXWf7T{@Q2lG!0XFx%q#{{GFB_wmG-?2mi%5 zWg)dI3}|HoLg1&n=(4ZS1t`m+>~Q2IG`VA80CsT)6|tVl?InxGjG;coiV#6C@kA*{ zn&8%VAmAitUw6#1$7l4jzB4~a8scX)*eYsGh0mUIM3?Amuj|Gk|J~*{I&3?935Tvv zlT-G@#sa^!PE)RXLC-3-i}1+md$_~U3NyyH-@}mjpK%5T$ZlSAQ^l&c%|W)a;T5g3 z;5SPQz*J84&LKO|if0_MuFoTH>g#RKEJDdAP5wdF)+j0c*WA~)lify4NvN>Ho?1ezRH$I#0>lD#fEdkxg%zJ@%5otTInRbP8n@ zO0L2<;z7Hb!fs9vzztb;-M-wsUm_f0&ZL(Nklhvva{cqVIg_~D;DQF+F{)cU#zkD6 z_O|FvCc*FCFznJ|Vd`u+kP#dJv?~a0lwsF~Y^+zVu7lKdGY~U_D)|xP8mb-ZYsaOa$L=Ci7$K_4NHUM^|cY?JrP#Hxlew zGc9W|5l9OxJbC0$?$tTm^UsyN0c_uF%Dg><@vl>FcmDtBrx4dchJ23cYqBU~Qcjd2 zL5WDZLDotAYGFK)(SbAd;gh!V9$o_8e9cc@Eju}&%$r|Xo|JoPoQkJeduKyyfi;6O zCJZl7@J0H?xxF@Y%JU|@t801G2;1-WaX%!LsB{j`*E;K#>nk@!UJ$-)Agn}6y}RN| zu5m31$IKh0xd-7a-YbWVx6H1dNA%CLjcAiq?1$z@@rotJSoGJOsLNx)&1&W4o$B=X zh%960)2Sotx18}Kw<2lR~oz2dM&({7G?L)MvsDn7zefH;RjgP1ESCEl8QX2~B24DLPv2w|%Y;O2GmOD2JN_M~R7zqfDq+6N2`Pft$H zSAB|!VMa(-r0S%Ja$Ezgl{dfA()-173LaB3)j_`aKq{9o|9GVI5&)l)5t0hHw&IAN zla%D@?+^n#4$*;*>NIHUzn>`cC{sT^L)zw%`)G)-u!<2M9u*a+`ucbkGdO4Zk;cSN zMd{q4pV7Dq`Nsx_EtCXiHv?O&_Y+QWw-c;iyO(fOTWa@}%~ZMLtz^YaA=k)9P4H)b zZL}O7GhF&O*Sn);hjrG3Y1#RyVxE~8eQm9|vA*XTU|?cHWyDMi6k(q6g7+p#+Q!)r zG{^RrN{=i)%cEBlW7dbA=0)>Lc*|EG;qjsmff-u1a5#kN7clmt%{y-h`^t!9vGYy5 zJmCjtD1Oz@-3N@bB`o%4=J7={rNxG7ww_SuDr_Vt>jqZ|mVS2aned9JII#w^lN;UlP)$$mVc7-k z#ywm645bt3HTn%SVFJ-Y7bDdGz31+>hFu$wYXRk0(3>XeFq#4WYKjaP=Y~?Yo&T?_ z4|~nP&*Mj|CD_?Qs^e3wLQuDY$mtw086a=mYl+4Lv~#XKlozU-Xq1CRNyn z{(8aYxO&mI4i=gGuLN_MsmjV?mH;nDS7FG5>n)|M;TONNn!y&GfSj^@oE9uLtDb9J zxY@_7he;IQL2t)S66VEx0yZ8t*s>F7yx8R`VZlz9Jz?^kB3KTDqAblGG>|msy!7UK zG#CrVcF|g-D|&RYlQ*HS`>n%MfpDuyJmL5Fz>8|G!8-L(i5f9pruXl1GD8HP967%? z_`i?GXmn}^OtzauV#oAK^vE%z-AAgKOP=n=XGw^4cS*dgNhbP-HyrTn+a%3 z8d#vN?j}d`$OMWvCp6e9iySp0{_2Two`uvvqS@yroc*Co@~X%nq#@Lx+IY;~>wsaZ z?-a$F-Zl(aB@1L!IvkS4oz_t@ed9x*Ot$fl=*9bV(~HR==z{6|jn5yTz;>|u2=Rwa z-&_uV(cbyx4hO9o20->!o}7evQ2eQtLx%Bw!blU9^Z)E(nKaO9FMwP4hH&LC+DsG@ zSw340thglGK!bJ*;A@#|?(h5$;e5Vcb@(t#qn^K-?5XdWHxb?HDyv#K4yzkJ@j^6rG-%2j%wjd*?qO1oL<5pd(~p5YSX+Nad)IsW}-yO%)wjcaJs zFCq`pG5N@m*xlTt9=GcfBaF5%|9(XO?{VoK`SyW=nJ>3-{^*TtmhN~Fo4vCYhJGSI zMhEmT_{Tb8s4!2Lmy$2PW1l@9bfZh~oU)zLv{C7|xIwq{8)H#WoHM!V3Xsj>1XiiZ zbMcIY_k%ZH9_ZUlkBdqHwBv;iuof&re`pQ;BIxT^>OT46peY=h*@qnR??ar`1ukWt zq|Ovd@bY3X>!7uePwoNLwG;OdqV^Qn5!nNlz*G9-eU9Qh<5p%uVthPY+(h33$l7fc zqcn|w3|0`}90NB$_we$Lt={>bpbB3=#_LZ(MXqSZ_!#HHv+wpy{Da_j2zx|^;@Nv` z#j5A2qNS4*QJ0gDeC%M+LGaZ#$}e44!&8~B=KCPV7 zeW3TQv!MZf{Maz11rGCqhrhcB&L27ThavN16B=+$;_+WcJ#ngj)=Xw6F!t#FL(eD3 zg+CiKwAQwKYPzSVaI1@VL*pMnz)gIV@V9Lo+dMZf&m&N*g~7_7GV8vQF|_v)QfJ<5 z@5|Iy7qNn~NhPa*cUQne)?hZ7&%}d@Rs!NcZvx>Rlb&oxI8)N3eqyfvH80X8M_z#t1D$zTTD)!Z&-!{msyov_5o!=&`Zi#4ZfY`7;oE z|Go*R-C}*b7AKAPSks~tfc_Qmu&-N{kbjo|^mxWqfoK>AKV8&NbyhMlx^kv-2iN7W)~}k$?d`C~`aQfg1{`(4w^f=gmI7mf6(0^;g!GPuqOVunm%f#9 zcUHj7O~AE!!ii(J-0l9dB*V#kYNe{G+tb7A#jLa=Hw=ItcFMeHvNrY>7v!%8wxwyO z2MiZSr`RoCwbK&P+|9yn<=4Mbgm%0 zwA)&_osqK1^QLzexgr9%9t^#k4RtJfsGahK`V3knQRsF;4q@vIb>>U~Q%e~)JjpvBjDg1jIciYmH@rq~LL*3_d$!iETXH zaLp(Cvr2p)Bh((J`RtNLfxm8L-i;^VT+-1~{%oL!qr728@6P{U*NLwgnGoUucp$^@?Sr-Ijpo)RNLI;Co z+VjQ#FPs0t2zZxGUvHq-#%R>zOpr1jFDyF;%;oSBY?8m4_btI;NnG`uJ{-)METs%8 zLF)t?G(jASPHjPsZFN}jvXCEj$bV+zzP0||T>o7Kim7zAe#iy$O`5yioKV{(?&9ly z)d!@nyxGCOF8!|K6et!CcHHpbrCtGPY}likn*YiW`@F2oRHquywg6WdT=L?o8lIWw zpBYicH0y@)&-R*w?xB1R?~7y4PviHYKUM}dee=lH1RW`8_(b7;jZo`(RnJQVu6M}Y zbotMbyC$#p|DtxKDo^afc34DMZBj^6F~LG-U|Rm>uJkR4`Qu4;{?Z3wL2x!{n~m(l z5pcoz7U1&9BZ=C&5zbn>$_)FPJiW_7I#1-Hjbek;LK;2};s*8Qd54i}=Ak+~wyyW3 z5485CA_*PHRA+(Ocs8G6QX{dphzV8nwj(#4xcRI9vpSHP6>tTU*gTG(F}D+6KSr{3 zh!nsdzS|mjlDvg4KV=8K{!X~Qp5XRaLhs;AoBNrLnznW)Q7S?eK*c@3ek zCPKQ0tCNpb$WHdi=>>!ZH*iAtt0Fx8$|5c>L?@82p)^t%MjL{1(?GIL{8=9FTh7nx8~GcN|cjp;aK|JyNryI7y4NGWIp

$NYU3x{|%p_v}~6>t&71g-7#*OVAUbeM_}+LF9n#_mv8p2K;cjDi3KXax)Jw% zB&%F#-ZbSTPluQO(R*I#K>%GBp<}VwS3fg(CuIyF=|n6dwNwvSBcpnK=@xeUNSX~6 zOM2~s-Z*9{_TmKeHUEw+0M%`->+|kXag)Zn;MzScn$jX;M}uXNB;ZBC-v&UX8yFEL zdwSw!QZsz}g!JcrT@jprDOjR!!=9qMF5sS-ie#pA-k}7xGAb7VeZJVqp;R<|(pJM4 z2vUvu-&{w*FZWS@4WnTd);k_b&3f>FihS4d{?S9DiFT(8Eli(?2;vk&@j{O1E3r?5 zmZIiX%Zk2xW zR<2CUeTf_iQ#cwoIyg{1!E-l-Tc50LV{R=?Oa=-dh>nc2&b1J`V8ocz)|k zg55ftf40tH51?C|ILuqF7sadVXaG`v_e7KaLW^?s(_usUdtp+OwX{DD<7dtuK8J3if&xO~w&!|e+Kb7Bd7 zka5E|dXOnlWdd51q@(nY7aLD8wc>H~(wO`)1szy9TN6qzyGd)80&QQP>ap14l)H;) z)oXyt7)D19@T`zKxa=bk{nhYvB=l|_?d}^ZKXY=Yz2V)TgZ6y4K6I`cWAs(#sM##x zXr67g3HsvS)7>x5nc^nMMmOHUjxMCl0_&FRkZB9je_oQP%bNbzzmwHBqA=QCR8Y2hHDBHsPlv?#tt0VpD0X8d1TQ~y|QHsvVp;yvdvpMRtjuZ7m>=b zKtsE=U=>m~4gAH>oKvBqM9KmW2^jDw6jh!$N-Q~~`$!U*1EbsWj;=Y1zSI@fQIy$W zO01q9Rp5uGYpAcjDNde*e1A;CjOjRXX$AxD^gTX9s-9_m;~JsQ4!dHguo4C6^%?Tt zQf%^(C-&sNmZi?_rDT-zW#>sRagpkwBv}Yff68FZ%UI z?V?i?@qm0g9#^_P*4D?YMsF6eWJxxIJ7;tHG0p zn&a90q;clnq!{*w(1Ydx`@85G0X`f10I)Zk`f2;(z5vP$<;e??x@>-|mgdLQGBR5I zD3t0=j4vbK3AdkSQSw+q{*)!Z=uHaKuZ_udsX-xs)Fnf=T_m4~QY;q=c7e4EA-{ckt{NQ_ zZUujlcj>0P3pTW_+n?J^09YukW|RFLo&I`~#@g?WgTw4POuy!~WaP^_>V5bv4o1<| zBj+wW0IZ_2C>;k#H*8z;6BQ<=6#CkC;Hkr1u-vi(P1oXyJ*YpdNEd@2Qpodo6GL?_ zFX5BvgzI{f^!2Zau5TjXgpV8nYm^otQBG1uHnHl?PnV<1Po|=7k;qT-+S}8Q(h!F` ztfNOx9k%Q+khTb6oOQjzV47zjmehkAKTr=15)e9eQU4>S(`Vw1r)lUi(~Il7VXnf6)%mt^JyL)@KOPn zr*B69Ub7V*39wr}(bs62SK*ZF`b}OiTWS*QoF=8%Dy$YuxRg=e+vL72f`g`-*Ynh% zKL5iXq}_98m7%gGr3Y{-H!IIwY*Rdv#3Y?}@US9eP{HMMJoB!j2Kto+tV%C^ACaL| z-;|yW0N|sAxo>$B^}*1ozwzrl*x&YzbWaO6TrM5$Dj{{AqXieSBJM0+`7AL`OX#@% z7z#{ay;^8uWE6`R2Ikj_KHDf4EnRO8xZUo)dO4*>lG3+ql>2bF*WZ&+<^kydbtQ&cQJj25 zKA#zou*x=LHc>b}amEr|4Cp2Wz&w8eo+Q1j8DI$AokVfcW9H&GPFWfu>M5gU%?e)R zq1cv+Y-%f9BO{2d!B+e@>05SW0u-xI33AR}irXPmUkiXp+Sw^+a0hV7UVU&0nm1GE zwMfrz;s;c1KWZoXXmDmc4&B;XSa)d`&a<2LTDH6q4!;?=`$r+qP&{QOeml!iXzeJH zePU#IeAY=sOj%eA9R9+C`(8ieDxrEnuX#*YM_aD}_Y^1+ej;?M77iA?D>@8!!0J3E zd5xEpxczpJO4lR+8yAlLoR5=<$PNF})NC7PhP;{Umu)5a)Ws4jI~bT0Mi$H#e)jG2 z@Ke`LPfaNEz41ZOD+dhg0XiNx*8z7sO)~@97}%{O-0u~=&9FFm0=mGX@TQ5;_c8}N zcAd=`9{vIBV4~r;Vff>zQZ#Z6zvzd#pP}KEGk8UHWty136##mSlI1`kda>VQsqCi{ zq8dUegd0jPp-@P;9#!)QM*>pX{c)kfJ$x-p!8(5op+&Kxg$DiAGCGxb-3+j*H=yRn zAoRIH_W)%wbYd2AO@#d&CgdCePbbx7yCya~O;tC8{4<2WH0s*1Q{NckGp64q4N_RJ z9d@~ZHn!=wDJ!5mC;l+KanY!9oqopspgz$m^^0){8Zv48< zd5DgFuvZykVI@P<)>IO3;-Jzz4Y^Crz=H#VMN!83>tB;jK^Ea`Uuh~X5S67WfIHSW z>MKM1{`&o{{H!@(AW?B12e2816?vm4n>`mUA;r*`uS3iD;6YoNB%-Cn2HOs7W z81Da_G_O)1J-ZyZBIG9WW}KCRSsq=I2HVHVJi9U}p{;S;KJYcvc3Y-|PDXG?r6x@= zeL+vKLjl5Gz{69Oc#Jzu+V9v>1NU%i3Fb`peK@3+m&i-3VAidio*Xyrsf|Q9A&d#@ zYY9vLGn4h%5&{FGs2rFE@GlY5s^@CduId}Un1c_pl30BfvPdjPjX&>1zaHhWcw%dAm7=q5 zqc3x%Gy}ea)_#3H`gDWnlfjGzpn|O+5OE5A*rP>O4w`uj@Cllh6A=&>R)WU|egkf} z+NQX!wJxg#7&hFmmi>Fo95$|*jSIubt$m``bRf+Ae;? z`ogi61|V`Za5R6%afcCN@>kIDLR zO*_(R*f>Hee@sfL`R~^Wc#65%VgqTR*tXn0=nGZtA>HeuowRMu^f#idpTVd{MxiCN zI5y5J-aEk?ze}2`pAdg59G1^ZE&OJJ``YzS?`CtwF6`LX;~`PNv(xdVPaUhOh-W<7BFT|5}AdPoaw8nP7KamFA0#TaiR>UN%L&&eiV zTte0u*dh11mv-yG`R{qhe7JjN#b02S1d;3t$7p*#oH%pl6fY_?x7%72b5DT)s$)(q zsMDDIy_CYVz}(EyHh)d_QskdU(yJi%m^H$y>OyaTJxS`~=`_gnoUM2YShYcs~ zXt(hXP0eHOPnIU-E5$trU{t&(+QsdyG6(t$)%Ysrp~qk(0RwG1B7VxR+(9t&Rbo#~vPxA(DPEG88>)z~PK;Eba(?vDgC+PB{H)cTM z&wk1#a2pH6Sx7E_@Ult#9Kv(tYB%?0*BW$>?jh`r3z%)-UDjgj+;Z3Wuli-lo5-1` zrB3-Cu>U!vHrIzgw8`Ll?_ZBBfQTgm{Nks*k+Hs+{yP+0Z&Lj)%O_&oA|hY)Ww!d) zZ1rW`{T$$H3ci%1?Box2Lv*Nbr4$P);P#sBqc>8PLbpI zcSf!Kyih&Y775|4aSWXQAscrU5on^x$4C4nKzN$+Ca<|0d^kso)Jl*F`%w_$?k5 z>^025Z$u`D!iyjAf3~-?J6v^3`hfT<5d*gEk0ZUtX|G~lB1n<&6GllHsd2K5GTt6OH~$Vi)~J&Y ze3@X}DIMYT9177C)Rl6uUM2+MruLyygOr-Z70am?`ZMw#O^AmR2 zY9K`+CFA7A9mvh1y5doZ;!(S#q1!;2FpfPM(&?zm-w4zNH5y2jH(T31I;dZ4CcVs*m;DxpN61`d%NhTHFvF ztnLdkgn9&44JUrRf6hs$OUktwoHb(}{xv_t3{(NGUvbs_EZNi5iky&$7^|p3xt|f( z!wciH4Cj1XE!PkGtlCj$=DFxgsgAnruEM`U@H;vJy-KepDH3)TC~r)0n#g+3>i6OE zR@QJS7#yuB?dCk4>sz>@TTbTRQ__8_R}$|qQYg@?NX1<I2x*0EjYz} zr@sYz@Fg`wcn=y(miw!fJVS+_>4W6fIXa~`C@9{pI3|$yu_@A?xJNvi4+S-?Oq|_1Kxm>W-ExfraBzz3tg&5i=(1@z z*C{^F{#C=2q5ppSczfkNu>HD$RUz=^u^Jy%Ue=$DQ8_|2rG~9A_SZ7#0(JQ)ry;kV z(*RSKG0n&rog^G2T(PU{x2X(|F!8f?2k>JPRy=th*-ZGDsg@m)ppV?jj1By2jC@)d z2B+`}krKa$VV3s~Fq!wKVzraqj;ftuWX*$L)HIMSVfI-A6hLWTO}R_LrPx+wt7%sC z6HtGKd~~dqVmDY%zdNLR>?_(su5q_(l@aYbs9U(Q_C;t>paZsle5kV~7I^1Z50l`E z&o5tuQ5fq3$#k>U)^@@wngr;)%CKS*w@HC(HNdk&Q)Ku3Q%``nQep`qWy|I|jZN$2 zPe28curWz*{jkA-deg_NJOU-(WT0jBh}K$OV#0{{IaaC@B_JC>YI#Q;WPy17cPUj| zLF;@>joMN7ZNNe{jqf}E9^3E0$nkHVX@uD8Ky;p&DCH#peSs#L z*O$E^nS;5|b+>BQCoEV4&}rW;mD>|TTc z6~|>i%+9$~>lQbEaxk)1Y-1>%2>C2R$*ZZu__k*4N;w5Yb_A433{5@|ItNwyHCIO5 zMOO)yq6va<#Y21bNhb`(Pb1bOq4~@*j)8y7USl62_yvK&5ovh%bP`bNOE|#bZ#-_o zdMFxsK*9}CAdJ-Yh}`Y*j@%g;exw|iHwP*`Jrj(KjpD`M`t_l{nG*hOm|gD zK*|>025K$ADN!uV50bTKB%{^Sj6ky!t9iU`jxb}Ner@Oxu){`fu2Qa?4^{q6xT0mB z?^E1kBATQ{{%09$x5G_6?0JnxnZ}pRUTLl0 z4YmAl8=ve>UE)dv9k9CB@nVZ;;Y)av13jeH15B!%tkf-iN;!fYqO z(!&p^(RQ@h$>?&2^t1Ps%&62YMSxK)^8|EY$<8a`gJs-v*cRy4eZ1_{rek$^74*d3bo>5hX$6 zx7fEt!E5j2(i!4^{{S}|5iSQ4-yZr%j(Dg4)yMH4qs(8uo8}d+Z{0=l2zCt>TaM=Dce`#)x&>(h+*r+E(6hOK%?NWB6v0g8F zU$b8O2K^3|K}X+zDfz@$DfOfL9W{t%{VEnHPH~&(3UtIwlUomAKnzGa-A3NFmFVV~ zKQmva$^IMpedJmBHCFVy8kJ`MXJ1t~2C(p<@RzgqDRu*L$zz}iF^xl1=W5tKZ`+UEoA zgX|*E@V+fwEBhIXKKqp_`TH!3_}zyi+F-tqX6;dT+Z<+;TfA6KdR>RS4n=robnJkU zWs+qcUb`narN%&SIFqp+^F4@NdYbnSads|tz?IKZ5rX>;gIUM)9hLpvNxkt}y+B8O z9NA2p`IkNJM|OFW119zIlHN++?;G&d81XO|m0-w6{O3yy7N)0mkTv)cvZlV7S6h+r z#71DNc}=m+g3CA=EK~<=z-xMuy@3B;-|R1RYyw)c?27oyv-MbU4cfb`r-wLzV6t4llo*l(t{ug)NZ zOs?e73ca*<2+9z%SND`Wa)A_Llj?-x- zN$o;Y(@CXfL_&y7MX8An<2)z^sWmg55RGGnYB_BoX{Sx>)T$iP$siZ)L zA>_&eeJ>GkT7UzyoIZW*iq{9CUJZYK2|~=6DE0oATH?x3ojOUihCcw-^bv!067)}V z^?rhIUin@Y`AMXs}K4FKjN z!y}5)IpFn(Sjy=~l){d*`~ChRTjPpq{fcygx5Q4&b?Z4e3qOz{@SKb*BfleQ`bM2H zF5f6}soH;dQeQx_Awf%3dgtDw8IBfUELle?n#xP91`3hGGd;*MnCd4T(XV=;;7G~t z#n&P4Np1JzR+z|EM0np9!${Wi{_T~v0f9a&e|vlW7Bub~`XY$Xx>b*V1qY)M1Hw_WP(K%<2Wf(!P8=#C`7Q@$bPAo^ zyb!CXklDY!eKCc6Z21`x*cS4Q>iy*5$6m-1P(>6i?ETIv3x3ho7ONloCB`dh%ndBw z{M^Gmmbdb0e0ZhQr9L`zddX8^BLIkLMiXc>x&b8_sfoXwYEv8TNO5m!1N_zmyz6J+ zR;;swCVk*j#-f$XHxoouqyV=Q{swO^NP(I6cSyFAZy(#AfDG-aJx88#TyPtbHEuF7 z*`@Vb=L9(w%DPZ{dF2F;sGME~4m%zGsFVv+F_=>`iLf3P|VchKRjm!CQ-`&}q= zAfmE*#KBvtuJeG9@z?)}yv(Sdc*-~pXI2sjVPDou>;pt_U9A+#^V2X?#48gOoi z3J=h&+Dp1<=|+RBDi9XL9R<4wQiBec{`VaHUqd0TuRLLtFhZ&N7Gcz$4;U{)m&d4r zhGBe1tV$119owoJ*w7&RD^<1|*KeMhqMF)o0a^5QBFl2u!=w(IjNK2< zwXT;lj6@ayvYLFu(uUrSk|w^J59TxSRtGD+cc3t!tTzsY>w0$$R?0RXAE(jg@faNs zVclijB;aDLiMZYN>hdh_K)3Ci74x{eiRarOxyD`kz}hz0nGa4I(T^|}Tr;fYYp@Kn z;#&A_$1&YR#JOkMCVY_EQ@u&`Y^Q3oSI=F45*}<|ufFONikFPln=UgGd>yivMB5dE zGl0m2K-C)JRddy&_(JXDR%+DXPkJ%aH=I;x76U!$n4q+-`$_&)>#TnKL@V>$pu?wR zQuv9x64%YN6M#UC>^Cwt$^F42+uI5<_2kSsu_WvAp+ln_&_Y#0bQ5|&P}cj``DOz9 z#fl>i`sB}}3D~Dg{?(HhkCXV1wS$%jr6W&5ky{T${Ddb6XxejnZe0Mo6ij#^MG{~M zko!h)D@@L`^-Vfh(dysO$wODCMq9>?{GQ}Iybi$5_Z~@Z+^g0CBW8bQe2{%ZH$$hRSm(3Td5KcEiMD;pZ|JD55`ux zHDh*faG$4au3-UM{qV72*5Ib~>luD9c%I|xMeo=<0s5lzCc2P8Lb{qiqxkH^#E_xa z5#i$3!kevAh`#T4_x9JTVQH_1g(q!a^sF4e?xU3@(RywHs>8rptV~K<`OCC2&e5Bj zMl^Y-@AYT?R^$%WZ>4zc*7(*FHI;A3l|zr_zCq4y8jBq{3@jv)(F=}PCjf7C)P`Ov zy{m78&&hR|Q=f7hMRg*Kh$=Fta^LG<3`_bXX-1pClUycano}Q|+N%#fyg|s~1<{f) z!;0&=cR$b)Z2>Xw%d7YP;m=(+1Bi@NK6F+UgCt{4Q87^Me*)_O$(IT_yiNo^eP22FYYd3B<*H2#aG~4Q%f&o|8)7#wG zg4=)exBp$x1@p!G04GIefnohq+XZHR|nKyM?E%3galAZG&-=%9S{iJ7ad+{FW z?gyg#F*pIbb-P{TBEKz4A#Hssf|zDJExB|$@Xk+7GxO7G$>X>2PugbDzrrCK=|68c z4F~mA0Q*9AiCg9O2})-G)VnfZ{3pG^DzUxT*VYyUcg%01%rRnh{-I^vv%>v9#D3QD zT%;9PV2BwG!n{A)C(ocBod0f)TTZ3xZdmOfdxO<25UO;Hq_cI(j_RII4OlQFJn1gJ z!`b}WUK#>;&DDU?{d92~;i%1-aX$xJZ82SCOlUf@&_it5KfO<$p!=-PFo2;j!CP2HS znG1;(4X+A5wY&=Zq(NJ$;!DQG0f1wDS~@Z;^WS?PyM| z|5S+(FLf{a>P8fQ0$$adT@0tieCxabJO1HB5$x4!78DI>Sw%ef$04|-tIqqaN~U|Z zAhCG85>D^BMp9aiv944jPuc=tibz4!h4F%%2#8{vWxPrI7Lt-gYTro9`*_snV_E)= z@Hx~s8i1qH=7f)BSr+n=%3er$x9h(7^bn1M50LP?tZM-Vpa<6zS@tt?jh;Dxv{RQ8 z7RQY+XD0&3)8@^w?ZD|^g+Wf$q7PP*blZlgP*rt{R+*^d*P`LXp5pvHX&}wBlf+Xh zPO~hdu@T6E)iDI0-U53NL&-ymZ&}VKPg_OC0l)e;`<5a6-X}8t8Unh@@5eW6z}KV( z;@O8#C3obRj|cAe6hnZF^qZf78w4}ZuTnjJ;|I~4a`~BJ=^v~imZ-gI3oH$hFB4?h zIJ!>xq6gUEXnizJKU$o{t0z3wY=M(lU^B(ivRNYf6_vr#*2rEKk$-(=L8?Wtsvk<# zDq0tcAosgw^JK#p-v7JbF!`|Qj3dG=Hu@0)Wf93u4KKQlzA?fSl2k%6nM9K(_3}7J zpQqobVW}6X>~Xv6XR(=d^tXvvqHN38s@3|CN|4rQXyrMo^ z2LMLb?r#Nw>lnxgO@#{=Km$(VZ}0p=hDebN9mh+=_)ZH^=8d`Ixmq@EwO^&XU3v2z@<|mP^m^2|@&PSz$hs#~Kjf^2TvOuHjn~N|9MpyZ^#lvxt6*pW)* zidWlr55_bEGfVy^`Bms#S(ni=f;dLE+a#AAG<(zIA4Koot`d6{2f;0k0rB1WwOir8 zg>XOSI{p5Pz!5H~#D#MDFaZ+vlHHt75NlO7sMA`(fb#hy8?*0IoI;WB(Uke*&7-E` z?m~77j{}aR1QJWidNm3XdAk(!xs^5rLnA8rg7% z+@~LXzDJhsZeKb!mmxYTz3c_~%{I!EW zL5N+*Bp*-lpO;|ZfgM`PcbyUn9;D^@1?s@%xl9keBM$AgGs^O@0V_9w{F(b`&YV!2 z%*S(mt_CR}E!&KD+A$9Vimf8^7-dY?;#rgzxhP~5t4b$TZL^y8o3lZ`P`C3y9OcGC z89#Y@c{XnKWXf|^1IXtNBe}RHGashq z6D1w1OtPeD^Pc)cL1%^Lhm_)szLw0}7G`X=5@re%8vIscY6HqFxek~c0i$fU)xa8v zZq6Oi^ikVn*$lv4a2kt^yb zVp#ljj@VZ>F>Lbok7#yv@? ziBVP=u{Xa59NZa_ERP=+gq@e2x+R~1gB{dGe8S~BhnwJ5d&`ek_Yok9VPZ7K;eK2n zy+po_I6fyQ6KXgIL;y=gr1$k>nm>}f}>Ev#7>8LXldVchGKNfWlS}Wh9YY)m z^r25!IA2z!kr5x8@#vfKYyyMM8n!*vC(I6Jdb0vA-7 z=o^Uo>4D1T7JiMuG5M8;|x}gB5ifh6hT;s>^>HjjI2pR?e=DuL8RCUi;`0Y zBG{q=LbMMnBH z=fArP3rDp%ZDtc{&7}CNk2(2&G*N{k#Y?t0NywD1^a#fP+$gj(=i6$0zAWhzvQfy`*40YsoVCi~D2pkt+`|OT^qOu?DrVw0)Yx97ViHVCJS` zoz_8O)I;H7g$H5MAFq)ucBnnBk4Z=1$h~^rbH@GMN(KK;sXcB+#|9xw(iGzlF+5kd z1h2gxD3T(cJ?P_Us^F;)`l$wnYv`(o9OB*VCWv4Yxx1@G#x8c%2mcJBlH6qiin7vK zdI(+W8*;ty6tmtQ?>l?!yk-5Jo9#blzy;n6^Xz>?W5%GEt5?28cA&QD(V?z^2a7S< zfKAgJp_7ePlhL`CvJq7b*ot2=D%_`>IOPW>lncfug07krk3r2h z@rY$++(`x#e^IHG#Zim@w70cyQuo+=k03)E0ia^)XHMBR&=J;bjc->{M|~+ z?1TotJ+g=PP*+1vf7)hPc$Si3FEcX=5|-QByOCeDS3^lI;1r*Bf2JZNfukv;ZNsCa zKBq}=t4%jlXiPRYq83mG``;u$OGUClL!yS4+<3nxgcq!H9QbpsHow;lcc|4rRE?2DiIza?%{RKm|>W-RWPPMBgxJx61i#6c&Hpt}4 z4SuJH^~3tx7K0VZL>4mOtrQ9BN{}$=M|bC97l_n2Jq8Vv}xcR1Av0w zKGJzor9J9>3jNKfTu=OR97PD@yyD4eaLEerg*Ge$d6j5vHwV zpM|0NGbujBuR5bfXp65b)7DLvNhU)&*Ur*G;*oEEC4&~PyXtIZ)L@m!HYs5%E@+gB_O z|HQc4NJ?z9DSjq@dyl^5j_kGvLblkk6rh1U62ci`Xi__@qqxD0$?&Wa%_7<9sEU1@ zr1RjZ2m2mrgKlcjvc0S-CRlMhzM{wKKM)O(tO52GhxN_^2F$!-9`p{H-Yrs?O zLE44>8(zB`(8dtz&NYNx8Fq%+4s=0>IYdRZ!kvj92`SX6L>bg}vXUe?w zR$EWYa8&|dn}pDVbDJ9~Jz_(UqXt*%n;I}6!h;ntC$sb1gCJJJXQ5q85~uht${Ett zKH`!>(_CQaO=Mdz_VZl_FV3x<1%V->&F zg&bZQvX-%F0anL;=^=aCpdgj~`AazDQBnZv?URI)Et<36;W#qoC)J2>(uDAu2czdzrny32(AYb>l{-F?q7@+iw+q82?%y`QF6 zOwu)X7=hN3(94%;)^3!w*9r4DchE{LS|9T0fGkKK=jc=|?bof}jc0RC=TQL zl!3Z;pRvj>(N@OuT_@J1(KYhked-dgGWr;!V1ml%4rrW-U)2lYFe~Tkwk;$uJ-b=G zC2~lMd9p|?)S<7UFO@PVRPf1eork5%cuRAdNHNIWeg9}vN<-gBv}8Y}_lpc7_H|ap z@5fn>P9hE00Kso0)L;IMB`(N{yo~HkD=AS%^yIzf-fre;;k7q(R(CP)On%}FR(b0% zX1fuDrzt)9f<4p?P!zr~dv~PeLed-@FZqb^TWPAS`_j4ZDR)E>628C4-}Hzq#xtgHxUCs z|AarjhgE~zei%f)p;!sMT)r*3CQfwX=ux6MN(5Sv@VJ<4pYSFfB*9X}1m{^N1Mb$Zk#VOK z+3+}Db|aU(b_4b5gpfU@N-i^SeNNfnz>|j=AyW*4SmKJY*S`|z=(YXWxc<3K1{g@j z9@<@$Q8u&*j=33v;$?O{XGskksSwn@h0?Hulb3@jreN3@CHw5tb-VvByBk`sqbB>< z)3HXV!qTk5S$}1rmKWYv8TGUc&bj@^iZNjj%FEDG1rWROp_eq`Z>=u)Xc)gW=eDFq- zEa_B??Q@aF9~!yCFWU)n!KbOUU^&_f5lrmaZ_;I?HWZk-4(u0F+*<`npi`Mp{o{!z z6mt2)^I?B_yH8Fw>A!mOqXyU(8+ za%?7x_v;iLUT_ooJIMTnqz zS+=$4>o}!rI~z#Vo_}|neiNP(CD^X_3_h|AN_$&&X^dA>5Al>|>yT=#!JeltGm9r&3y~C)sr{B_<2YNA-wxme#3CpgY=U^{mL9`*XO@8yPVa6 z=^>esD;8yUJ!ndx6Jt5}WTWDZ1vaNFHJ=D9Zqy=mW^QUbAaXwX*VVeR4bM$VzMe4j z(s{)2trZq*u|)xrPuzNbUi~l`oT^itM&tXHtVa2yzXfy z)r)iX%L=An&HI(O^S?^0VcbbFMCwUN2^FvBxV6LOUnmlHYPoRh^g8T15RCrmyhC5P-8v*dk#bH@8Xx+0* zuU~KRVyDGwz1b>Ys>9n!Qp*l740D;gz_Kj+rE1iQhgXu7M#=UpN1M_>tUs^m|K;^ay9`d2ri&1MzUG+_51kgJ&?b5~j>clbF; zlI)6$`aXUp5(+;Z2!9PaU0rDg8O-uiCn0De=$d;*My+B@!jestVkWq)hP>530s5y! zgLte1p3EVa#(u=RAy&ym`pZ9w3gvkGb64!hFl`6JUre@WYaP?=GgLJCsHVAZj+-O> zhXab2oAIUd$x=IWA~WkSDW6^;1Pz<9*C-T%$;m(LM?y~5sBh`+m?rrBK)|$|YXaw_ z@TbQ6i*8O24%)}cN8ztF9CMwUh8}#@w+Y47c}mOT5IAn0+7T=sMVS*ERg#rJS9Rq! zH>X@?aRO~TYfzQ*og;Mz`6H)wtwnLVZ&*L6l|@F02xv%%5PciD&8t&`c97klVY}ax z7pxN%q$(ru^`_a%87!0aBEb0!Xmy_Yj4|K@OXBt1&OH3zZWfU;9WX8ali4?0zI6$y zWiK-920G>4cu$ljefK1g5alk2xA8HoenbFLb2$F%^vPBmp+0&8Fzn;Ek8oPHbwNp} zpy>}S$XfgXI(2(2aEvILx4&_1V=><$YoSXr5VaeckBmG~8c`q`FB5EDV6 z8!ZbG6>6Y4S0@*vGRa={7x> zy{cpukAd8NN17z9{?LG7h>;Hde6sf5s;o`8M&6pHFz0L8ya3(LP~LLhPQhVYwd-h& zf9*|sBFqkjK@M1Jr@&H#t7#7kQ7P99@f%*#meJCGwECVo~z4L=c2j)Rw8?dCEwRs#arr{ zS{S+u0_UBTpE@}=Gk zZua}nNQ}|uDIi~gLY~Ru#9$ul_YS|_4b9wR4XL=$SSYYzKA7Q;2b>Z1JID8sE?^e= z)lrIn;Y0u}H!`ii_vL~UDbOjV(*{_ykHztgRZ?GWD%(L?$wWrZuUm&3lelk}S^LLG zft7IM1vC;o{S+SZ6cq3z(STdKUL;dP^O6GIkHEzCS>iXO=Fc3=cwXXKD%MIGcB>2q zt%yZ{1>wm2FvjUPmMGm1uU(#Tt^RP-0-NC>(GISQ8FT}noO+4|j0--^5Wm5qLmrt{ zd@^s32LG|~1AYF@M(rjsgtGRr-sv)GK`+a(FfUx|DgoX$k~`K=Bday0;q4k~Yb>$4 z!wBxvyv@YoIZS8zf_eN%Aj(j0<0jFeEhasVHcHEeEx6r)S15qoa+ilL$Dr#mnFr;) z<)%-fc}VCUMdOZL_@az`IYoTmeFK(}8pW)m36z6tYj(1v@lT^6mCN)RS>Xu%?kZ;c zh6HkylNNRuF*JLaTKlFH>9^=v#8=y7;NRAUn^l88y;>xqK1DXYTlSM`9t@Sb0PpjF z&L9lf!Kr*paf1_gHM4NXAoVB>leoI8;*{XK5H%6uqe*6y6vZdJ6ct>xDx6!CPY6KI zi;CzQuvL@<7AFp10%{oyU>6<=S~{^gGf}&lW&39-0U)fOu53upUZco8z`}dU3Q_1M~J!!D= z(inbx4x8KbLcllVCgF={J+Z1ehq->@3P?I_7TBYrs&@GDp#C|NPqO~*#38_S*tzT(selGl$Ll+g%-!LZiF#Mk#oAg7@L4AN-{L=vt4E58vQ`g? z&`;UupZA4_2?CHu*-W4rXV<*PnRL&x`t4fH9P}GuHfWj@-Xov~9_X9~^dBS`Yo&?Z z*lv|g)IKvcO#)g3KOr*mslazyGVSd0Rm)$+@<`uZRvI0Tt%OU=2tzqj_UM?9-;Es^ z_gAf+k>&In`!pkwYZ{pgIGL$WmI*TDj>B54)h3H|MXizF-ae^_TG*hsc@PP#uThxm zY1x?PpzQY&h4;l0OeR)wDJ6e0iBYvr;U22A@T9Av{B~S`Y6Iz0d2@YUD*$U#;6UwdHy)3B14k}`?I!7|^hn<-H|9Rt;?mP97|(zUW-SB1Tm;O1*==UGhvyjrktt5$xSNi?Ef zkG!+@3k1?6FBo3QvY4*#T@Tdw%OwOKDT623ZV!q*po+UnW9fRp;oiG@J54tosHL2J z`~`U8J@=xppBJ(>0VrI8Q7t!*41To&P1Q<5%?O+>)~D~VuJebi@#-j56hY3T^>BsV z7FJ65ieS`Yr3umqggB;^=piK(W70dQ4z%) zWK!jW@(=8a5|c##-$#iYms)0#Q{&oWvxTaB@lzxn`0NRa=jv4?=Nd~flZF`~;T-B| z>YCp-rnWpls;0yy>LUaqm0(#007P-8j-QeKi6-HwK^yBB>91&AT!^68|KP3{W$L}7 zzWaL?t#g>Q<}vxr4tlQ>vXwS6Fls3I>r^HwF{#u@Jr>yxm~Mdp4Iky;dOPfWo&i7> zD{47)&`jK9P<(cbHKWK2F)U7P7kHj?acuyf1OirT^zI(AUb$3$%X0#J$Gor88%u8b z<6)|D3mA+kMykPO?>ynH)DuwQNwuZdZ0!EyI<_-UntRDd)m*1y!`u#lg)mc$}+FaqQ-gQ3rM-;ISk9`rc zB34N*bRRURoMye!dJ>)`)6&k`z;}jCM>hJH5c%`^usyQNxT2R581Iom%XJ2R+=kz| z4Qe?r+oAVga*U><-kgdGPS`V1X5nYnw>NX4%LF6>vKPdec1L>06KjF1=2x#`JJ(wC zB;*z?CDKX+L{_r~b?S3&5Uexs#+IR9zv4yI);|BeOkZ0$p(bkmGfwn4WbCxh;UmOy z7*=`D_TdpT&p%_J^o#a=(R=nWWPli-969g)rJaq19=Z?#Dn{iC!m|I*bdCf#Wni`| zHC)4&fbg#QqoZsM5=!K07DUzTsaJOsNzz?7@`xiUAind|Nn6QO$Zb!Zj^$=x%M-8N zV^cwXS!v9Pqo>B6=tOC>jO4k~#rMrB(h79j1mN0x!z_<-=9*Uc%+~~YN!2*(Yl*`9 z9yV>AoZV%ePV&dl?#52ua`WYZabbu*((lZrM@l8$+G1g8_XYi;wh5xu(hM+$AFN z$_+9mK(Sle9_6nZ@Pwd-Th!_8uc-ol?c$jN`{nY$JWaq6e;`L3@Yla)f=xL0@WE73 zs$yBWhSd28?05sxy+XRDcFZr^VxaBX=TmD)C*T_mCAt@%LJ@zBeEpUCbngG&bl2)+ z0XOu)By)k&#S!e@9etLTCck0lj2HezF^u8LoF%z^h|Er{g-n)p*^5?Jf zO8q%?L~RkW-nyb(&&`~1ca>oNs-s=)M=#KQQ3#MIhrVAhrLTB4fLY(?K*n|(G8Qb0 zCb1%>tQ#5lX;@znaoemqWrA*L2S;6|oV}NJHkcmyj@9v*diRlK)uS9;U+x4aeAGo& zY9`7!k_V2Swd|z7uSr!z&TODuKZB)v7*-~K>G}j7IiW=ocWWo%-G2!SrYg_WkbX#@ zliKX;Y_E^-%R3oYWX`692-Kh9a&GaU(&ts#R^Q~=e&wqq^=!1OC9R7&n7?T{6nwjm z`CC}HJ=6JQ=FFd&V+Ns5b>o9hQt9`)X1@HDJ7Ipba-W=4IJZN+l z)qi_%D1kl&8y~1a;+tfAPjsoXIMrLMq?I>YO2e&rGY>90=-OGczeuPfEtuZJodHRV z=7!qJgVZk};?P$dV01nNw(5z1q&6XFi9*wydP?_->P;$&I2GrA4i87uKVYka7V0j~ zsE2bzOLEbfKou6JDGPWk+H$)lHP5W_ju2i!%H{6-Nq+86Q)CqbBe9wsjvrq~@289J z{xNcLi?w}-zj!LuBo`$jQhQLgOL!u31EP9_3%582nU4~7N059=Jd;DbNrB)oUcmOs_!PNy_C2eY}y(QJGW`W^v%Qx;*Zuf877+wi`l z<8&7hUT0SRwGOb#rkPKyhu>ZN)!*c)CMnw9LrC!sx(+ga?a$_hsVAvXM~|dfam7=9ds;~T zbyJ@rJ^WEac;6HgP^(-4ZxRl9 zVZW~0eQ&UGz-ZK4(7tGg(zj>UzJ^ILD%qj-SO)xP+6_W!TX(o|@IJj7KziFGwFI99Lt{j?@c%&&h#X-Ywwazczdv)iX~X!crT0T`Dbk$Jplz zHmeJD1A|`BcKAv!0maXtms6XudvR#KMR;2Me((h7{3F2p3haJYqX{^h)=Vk*2|vX@ z{SH>fp=zIzT2NOBP*;W5XykzhR&(=BEBnaP!1r>X`W^X1nT9WzZpaM)(FS=zX_ntN z)()q6{shc9zRMpRDDe-nPCjhR=Z9OrDYX3mB_Axw=u)2el+ntCGRI}=TQf!TX;%fa zk<5OXxfXvuF8lQNG_}%SC35PaNUYV3GJovP6LD;Tf{I=X5heja)>TEOiCI%5_s4YA z6>*}kMAcX)Yxw8$Fwvv5T$09>z^u87#!Zs1EtJ)Vp;;HSlVI*R zx|i(cLo@FKTCU1lcaFmSI`ViAp_NU@=##-=7!;R*Ml;J+i;c`(p;{nfA3-I|Y;mxK z4xLNVZ!F&#es7RfWe0c!Fbem?rEQUeuefwvPuKS@{rVY=?RDt_^Ab_o$`HEJVyAwD z8nas0-bjUdl%8$d8x&T`Rn%-zeeDO)K5j1?wWd6n*=qu+X51$>j_1<2N!h#_8{**0 zG`jEGZERZhLWbhPs6TYp)mJ^D-{Y`n`(YocWhYJO%DbE?p>*{^C~sdr{-;)J(52h5 zlk0wdZWX-~d%Z)I{Zg^uiCJNdv=vwsjb7h}2G|Ro+y(oPT6ijW58hg((XtAw5Xpt@0c z7_=O#kuerpThGEzrTw6zFA6qeOLfEo(5My9UxNNC++%XW#2~>}5V}I%oEH2S5^tgv z90zT|;-}-(9>2M;X3zL2FH48!noMZ(gcQR-E#?WruF3}9dE#i}a{OfUMI+g;Z1D)A zKiTYiXEnItiLCTFxwI09CNM6!-YFAa8Qak~?IP@x7Hu2lI9{9D(jpmt?fE|sb=q9~ z>+=L`%OA^X`6K9AR<9Y~b?*1lT&OVJ*6xoM_2BD2D_zi4By@F(>L8#h=S$va5h(YA z%oC=}!jb4bIdtmKHAB!@Rmvjzqn|{K)}p1?TDi6}TGhW_Y=Rt0mY>E~F z?^2+SMQL_I0t#>|1c8HOpFVNah(k}Ee_#fy$d89K?$OU!3+wpu*`2#cN$Z74u=uY@ zPw^)Uu=q#x1m*SHooKYzeQ+|06-kN}9lA@gb;YoK`43 zH@`H_L|DIp*%%`t%i>*=oFk}btk?_#YNz%5Y!-Q7hbru z-N90Pk-D;`&T*EC3zRJXZD8)geVdKnr+Y^pOegu4Q%kbg#A%5yw1ZUE%Y$qwt~q3L zTtxB+&bP6qIERt$Fhalbk+qc7R7}UJ4e<2V2+enKcgt*I1cv^v3M&j?hq10LAMF5&0F~1eLG%O^4bG zs>%f@`AT+>p8`xOWGi7AoD@0*um9x?(HeA*sgGF!~HznX(47^Hcv1N1EOo-BPQyo zz2ZDR4?R6vWZ+s%zH-KWXNUv4hR*i6+h3&b90)un7u@nBs;(et(kMgWyj;0$^6m z+i%N?5xVX`LgnsZKhR0?+G!+lt2)#gr%zSud$e+Hn^{*+$X@6Wl_9}XjGV7x{iNN2 zFv%>CwB1Hck;c6}ZoiB@Pj(wbzL}}6T8YNMIL?L*tIpg8VW-KG=-^5 zF6aJuhxbh=CK&%t(f7~+^p4kfL4fEBfDFn$SR3W~BTn}eFh#gFMm7LcyKk|nEtj{vD0NNs~C zpMPVU3HbhKpuYHr1uW?{Ni@Myd#3D{JhJR~O5J00ALg__qRi$&ZX22G2MKAOD@BLR zgDwCo(iMYs-<{H^GrRfQ~~&)X&#j!^gvqpvBdc0V!4k%w`Q>TC`t zgLwvb6AWE%ksfbW#vRT2%pm4N=~uh(UXJAJ*KPmbbf}m~X_qyr1WD6-D5^bX41Le2A`mx;4-2;&a`i{)a~aGqzcmt8%F=n0(0cs!5jjea-HM z;F%XcLhc{6slgGV?-`A}sn-yOBl3V?o;Zgi`S&Rnv4Y+M^^k{PDSVqG$Xw(ijDN^Y zu;jU5uz#Mao$F`BxA~^%O#rS>quk7Ai$HHY;A@@%XvDjjkKWwQO+s58`IXCCDX-uG z7EK+fld?1v^24L{<405I(bdF9CoOVDnbRaMt=nYK^}RAWMfe>{NMml~3E$}H`w=~i zfA5eVl^yy7tG#GJkE|2_G9LL&#~TA&@apy-SmGq>uA_mQ)WmX1o#flt61A)r6@uym z&6o%5WZUyjlS=PH-Sjr65<8x0lu@dgAoG~b0@KQ0tVrQ6V`(YWbJwXIpo8GF7NqVt zwI@C#f?4s((9I0+&g!#}XlHtDm2DtsQz1Y%CnUh6ykN?ddeJ^Jn|^+Hr{cGZ0-|uu zTq_f4?Se1Bb&%{J(-XHp|WzsF!Wd@A>iZftuol zHc_LhHX-(gZY|fcnPgrz`Pp1x*G%+c zrGt2ob$86P@*JEu%T87>mJmc>uBIzOL4--8Twe$M6fS-tOzL*VXADG$>`xA;AIN_V}A?t=7u z|AW7{++?M#e8FR_{NLl~4%*5T zdFguUmOJE|`DO>0OI0R1-K&5R2oPjUy+HnM@u zD5onv$A1F09Zmp3_0hcz!H zqi2ynVM=e&`wbDys1nT!Kp|HG4le{gKYKHRid?|({>{i zf=J4kuK3NQ0Y0AFWFRnsfsd;JA6qnT2l@>XTESbRw&FNuf%lSycrWq_yQCtXzm(1R zLlgCPJIHwdS}4ib9df~iv6k5KA77Rg@{pzV)bvlOfen63LgGL|K${gK@3Trv!t-hs z0A1PohheM-yW)p=#e87bey8H6bzs%HFBT(zu~BoAUAO=cU-7Udie}%ltM^Yn2Hu%I z2EG}rKeRB!{V=9fY-OWs_g^e@D|S*erkg?iL@|iVXMbW9%<5MuCUh+#fd^K4XGj}< zTQtTa<{7^HRyAjqZq!LQ>LoE`KTUtbuxb#^bN!`FZ4>HkzM!WP#mpN3ucqpQW?HT7 z1mtsob88*B^Plum^9h!_VZ6^qwP2nwUUsUu$;r_*2w3(UwpuyF@>2d9GnTxb+2a<6 z7n_PjdM8?iF63TR(c#9eQFyl~jrD_7AZ%mEPCaJ`;rU7c!s%S2C4hrZgwvvCZPzMqrWRG%t3O?CHr zU$y@caCePicN__Cu|P9?ihquPULvURc-E>sawQjk-cI%tQ8Fi*!TIv>%a{?MHrNpJg3zJ8Xn1*|*uVeQ$1 zTKh|i35xec+O2CQ;g9$^e*u8v8MTGpT)pAHUO2e|dy zuakktviJ!hU)yjbRY5b$#dQm&d`?I1)vq!w`wyj zTlIRMAkcJd@oTMOsSD}lPV^RFYddl>9|f?LLoY=bksJHQ#7ZFQi~2lX()!Y z=Njb@&7lbK^up_vQ=*VW&*U&k?d6z?o{?8cGU``qaz54ZGbOtQk!(P0HdYgHU)efZUyDEm#7<$Wi3C_Yj;`zwD6K9}lW^XHx` z`*Wq9xUfguyakM2J+Fu-h#YGnmmcA#2z+Rkw)R~sx{antwhGJQRO#F*^&`r*LAm1%e6Fptu5CH!ZOaDeePZ zbID;_(aC09zS09~Hw;RUI+~<%&3T#tX~%hkt+G~^Q7%x zr*!Jq5Tt;Z%qxC}uNs@>PANR(HW_PPi zKcGSIwg(Xkn?kdW%33v=gWLD;wb#M&Qrbi-Ha0pz*g+HI10IZU`1hBs2+Y%s7zEq{ z%2R)Hq@zz_H0A2O7NimqatHHw0+iUq~Fq}(`_Q2MAjyV zajzrTw=Y;p9BJmKIBI=U39w_5hkle=Sq;jh6Sb#_*~!)=Xp0=*=wnR%9uLesnK(pg znLj@IKO*HmJAbWu@+|HvS}L7h!ld5aMs%xgDh56%-8+}A7murH*NMt^l6JgCu17-u z)w2Sg4)e7mQ}7nJ~fA=E~nV*`i=@gs{u5XzJ_E_ajwVFtq>_@==#19!`^`**D@u;_kO_vaI4fz z^3EY{F{fxY>EmPg#qE++S?EHNnmggr9~P08$?Y72oKmIF?aNpL-uqdMMEpx?R#lE1 zF)G`^;3G5KRSz;VGm$nUYd2uY^0Dv>Sub(Q-AAuZjen%t1x_@@Yk>< z>D)iRIRPe*Dbat^H~u4-GFJdC#}pLwBW|-_u!VJdkl!i3!6#_|;>*`p=UC#~E_MU;W`CZXSf`ki5Lf%3B8v z4!Wc7Tv6U@!8gkVq_=~b*P2*S*m5Tx7F&=idGdjU<6mR&V|%vaV0v9nH`aU1E`olG zAi3U>L!T!+p;r8Dd8+UuqI6t@RZp0y>6c-<4p_>rsSKrOo^tTGZt6GF_DCZ#qHrl1Kl6ON^n=ty34gjMJ#X|5}4#tOxO8q;)Q2zku?re>(mV zLa!|l#=qf+TYFzUXkfGwH8KkloTUd-CIg=@KEWQpc&W9ED2Dd2iNjGFU$7@wvz3P5 zn9-_8`!AIG#1}wc(6);sJG@Kk#-RY!QOHyJhqd+Gzw%Dn2p`W^pXUd^~ zeGH>^+E&KWrFR*1EiF;_CP3(jbE-1d4KdID26Gu8WJWw`l`T06urk$XB|CHeKJ4Nb z)e#R#AN#f^XXQe{-w-!%QrtXDKBVEh0M)PDRR=Ug3WMWNw4C%aMOoNMvpJge9d2k+ zTKnMN>~pmB{2^mFi?3oI(e$m9!b(Rr`c2X7tkhTEv5_E9 zWub8tH)RA3ni|MnwXHMq@SOjFmfup_?HrK_vB+RfWE0$!&dHyZbfN4G%&rC}9PdiwU( z<;0+es)=44D29i4T3n#1_CuTIGRui=q@TXeM7zdDv*7{OYnw`h;G|`RM&-MNQHzcV zNwV@|e;u0uIZ5}9*+^}yBy3yB0h=NZz^e``^q`iEsrj#l6&`R7IQE0waPn$i+YTC<9Fkfq_8d26W$ z<$_W<=|{5WFSCDiEp}w$vQ$#@=-EN#O?(Rx0Vp6(x24qjcRXfNd2EouB{P zwA^XMgz_>IS)PgZ$!G)4P60uCs+KVxqY2!C_pTKGFlq6K-J7%!_%vN_*%Su+N+TG! zo%C~LFw`2W-!2w-_EeWztISOZCXFF}hNTN?vPJvIO(dWeMt#KO^TKLcfirMg{`>W0 z>UK@tSd4mawbCh<9U+cfft1d^-BrtYJ@ywPr7E3V-v!(}O=6M}zcGA(BF%z72gdGA zzBR^by$f#KhV*)q&&H5jk36Oo zxF~J_z-52!Dm5m2?7G0)=00e1JVmj1uP||w6!^oF`J1>sRBopG?&`A|>q*^O8yIeB zNr@?PD@VFsyT`tP)~ z_#yc0{S3IfC6hYvFkrS-pO>dq59yv>3cZvQ$Bp|^*O;v4LE(oJB-rEdE2}wUV^;Mb z92B8&(&|YA9OzSkRRq%C;3QuA%+Td#U0NEuT#<~hQiR!mK&Q~vipxe)w@|X|vNK1E zio?XdL$HtLCA0giq7l8Jui;au~3eYS9wqf|9Q4_da&z9t1n#t$W;&{{ny+-;hN6lq$F#*bj& z4tNDU>lgN8qVU5cT|DWXy_`J>f%J01|GSh;Wa)wTya{vWFj^I+oGQJd>y{qRW1}~s zy^Db#rkYxkc;k?f3z7ca&%pwn96NXI78maN{W_j1`b}G-e@e1FwP&=;uI7&a4kCc{ zvQu8A=T+_=RJ8s6n#icbsB0mc&Yn5=b&{jY2F3il1z2H*X8CPC5g91A1>ZVDl~h5iyaenPVtMM~CZCD`N$R=iXlFsQsf z;cdjQo^yL6V$x;Y7$}h1(JjaguI^ZSn+YxIDL_D%k1RkRqI;S3acGli5&QOzUd~Xy zz1m}e`o&#T!BhpR4bJC??9?Ka4SbgU?*G z%l$h~3-P5H+H*Czm|?d~iQ+d@-ZDa$uCz%#?^krOXp-Yg)Y%~S4P+O3ZWh% z7}Hiyv3*#@vTX;94vtaZ$3_KU(xKjcZKEGjaO%X)nO)wP=}`yR*WC@NgYEjD<$6<} z15%dl=@U;vdnFekIz_eQ7Z`SFDl)^cz z$Zy~=JtLr>U76d@e^TFCrSm|jkN_f_mo(`apy|Ng^C1m;%a56q*`772o9{9Tf20_G zt-?Qk=i}9;qF2l{%hX0mb2F*lf^2pMW%EL?uo?I`1)~LA|K%;4UYmknhdXWQqWSio zNI(AXdZ~;+`$Z_en59Nc-k(8_dP;jR(dum$uw@4zttRdQ{rb$!4x!!4Y_?*V=_=u zJyTSvxSQ77D+ucugIF8KAXhJnouQhMd<{9N*X?T&VQO;0vh2buz-`m?uM^y6D_abD z>CQ8n{Trcs-}fVboSn2TteN=gW$1uyXR%bX2;n8xi&nO;UbBYaPOX84580KIOe;NL zE6($yo0-6jLHOs_M2h{);9BA*paz2>(n-Ctv1DeZhc*P+-S8+kEQ~I%NHg5wz zk+~FGRRTHXTP%g8UASnWJJLXt>2kpBM-WeukwjpXZcY$p+P+$niV1@McHq*|8Ao(8 z?t*{@2$=K`8V#2lJJptg{z?>52s=#^|KlO9sT)M4h?ybdb!Kc(Lq@06Cfa(d+o zdrvOSFA^?WIsPoqhPbm#CIYuQ6Djhw`|>7Y0K9s*s!9iqZjEB>un&ln(OWEN%lj-N z?#|w=XQn@R5u;(x#>^Yh`0gCR!&W459B`^&>&9Rsnww%X!J(r?dFbst=ZtffZ}xy* zE|Ct?uS+vXKkPN_zPysJMDyQrz8uvSQQ~?I|fG#D%dkh^MdMYSv z&YUBQfWHIOJqxJX)t*T$-9~)GoHJU1+=rMHJH$iihikfW8 z(rd=0AtGy8+l&bB&LdIO5_`?~F;!5yAp4#hcJmeF?t<_MK#;ko z8({4T{B)uW>-m?m;KIe^4Jhy`vrx-o=Vd3+1?T$p@RGUcwVS~&U;m%)Iq@gQ0sZT0 zoz_H_IJ2|GRFg4FP4k9iRCCY827U~S)CfYI2b{hSd#x0}T7@+Qg?3-M9A_2%Xx9rZ zCm^%lum{Ub`0Jx0uh>lr0IA#wjwSh|8#Ea!3dEinoOaN|-R;{vDl^8jh5TZWX@xFUxQG(rUj8O$fb(ITh0VN0zmr~Q2Ql91fSh(8<#%idah{-HND zjC0CE#=Jxv$?EchnI1K;INRLkOC8tAwE>-U6VqDyoT;NE%}q~dRo;agCxR)9hgj!w zvx8sBJ42>jQc}JTDB9T$*FK-(mOew-@2jw^1IF5Xh*0aK-sBYp!4-bYtzk?lYU5Kw z@6rZl{646FI}^pb_k*uLQhT22MlCD%00Aouqc#B6A~0qL+?}JaHb;NtMO=W)(VD&t zQsQ!f%?m3<+6)QjOKyxx!4MS=n3mhxKMJ)E*!_wY$R?6>Ch1d{M6tHY(^-ctUcpAQ zf4d6@?rj6$F<~tI^f(+dOl$IhlT>@aSz{PHIWx=N1INw1+VLDZiPr5d^7CGZHe zK~&&@DlFNGk12amg^}jcV-CK2xzvtvwwko|1KiZ(G-YNz;J0AHB{(%g>x$!m^SS~B zPm6w(1b626?x!w^LQ;&^iGk3GZVDT}99#xoTaTRG)d1uX&WOx=tGPSL6EaZHQ|*wY zI>JwibX+F_ZqJ)=otnzBxDK%xu%55FA*EVSrV~_1G2z^fAsd|-ABCF} zXsb6Ee7sGo&}sRyH0XLVv~inYa|U1^#WboO0lVF1vUaFj8YIThcZi{~RycMOo5_gjpluhG00= z);IX$b-r`mVdQ_Xtv$lFdg@s&$!;0V&#`^Tpl*|HGk^RUdQlDaf?96y+>`~v%;R9| zPJp{xlL7+=uBdaOO?=iwuCOPe1sMz7-EqM$4pkE?y{`E)`w~$Ie=>P8`y5{xOh!D>@uoDMl9~7NTKV(YNt)kE4f8ebG-y(e<+XrCOk79py zTFUNtYFq4x9vr$bRBTVa@fMn4B__W!;Rcr2lhP(tJ2eEobk-t{B`vU>hUt%=V3juz zt8|+WF}UH4Ap)1Q?VqKP6OHKmH_J{bUJmL3_y+yW8>-Ejd~F&3|~ar&a|M0iTyL# z<$vKUO%xOV+gr4n+2i?@woo)a$Z1-U)o*TK1aOJ{c1VG+B(B z#-PVB)Q_HOH+#rBLS#pC36(4E{v6L{Ja)@Gc~aRGD8_i1BOm1#jyLD13=f(JOWn2s zDeHi|)+9_QwV>i88o_-M8^%4IXeyiRPfP)?4hqxglC9rZB}UYZt>e_q-=M;akLlM_ zP9e!~u;vC&;EjYudO-76+vw)Z-&xJ;V5pYPihDcGCzt|Di_n8+r?prq9rZe@iuQn< z-H~YyZbmK5SS|DPyTtY44#ed!+3P>U7h!*v%UIDCzgZjWtK=#rAT(lXq_py_aR?&@dHjbX9r((xtJkZf z)EQgi!NOT>!*TPG#^zmtAO|{`Cj5EewZOfmBFp^>2Lo3Z#70=bI|B|iO_Db z$jR{S0l+IP5FG5yWOhSd69n0mTcxF$HjQY(PEkPvC8~?Q(FIBH5*V>nt%A{qa?<=; zLT}>UtVe(J30{7QP%Qpez>}pY{>kJ)CyD!yMXWI6e{rDWNOL{$)X;Tf`%YXzpBYQ& zM22xP2xesM!0P=ZCu}?g7icXj^z`ycOyZ;Nxd52%sFn`uDk+ z^%se({rzJ2?P?ty-Nf36C~OR{BQuH|`z`%!=+;DTaT&D&P7P+2{}~-+MX-vt8C}g4 z+68F9P?a!6t=97;vnl?a2JQChFqS&+2wLy6fbsSU$&L(f^_E!B%yPL8gwwf%6_JK+ z>g4VTQok|~-y2if+CF8>{+P@5b0clFkywyl2P1F$Li7%hGeNy|>i&-s0U4V0i2G5V z0m2iNC_4qNa}Ooa`=uCkvYGu{P-XgS@;vtIxpAJo4p*GsU*b z`efi!)RUJDEL&(D)UaGR_JnqBHu$%fCWLtY)qM3xWN@%{8cTIexWuN>LCqblR`NnL z8%RYl!T@cZk7Jya7O;gV5pJ04CYWL={y?5nhy3jzmLVw%N8r^2TVWIJb@?c4G+nf- zqwPP+=jB=>A0j&VX!eBk4!vHk`R@&1%{J2ucz&pbS;=qOTblJs&}#&{#!~D&Nb$k? zOv`7$CpPPK3Pyl}suUxA_nXrxs%Ekyfhy^iI_fklTjKG`?A0k1yc zuuXf0Mquf@Hl4a%*Kl_B;w|ophD3TRd_M{POAv49Trd2vrqE~SgnvGk+yKxYbE}uE zSdi+j@}pt2a}wf5=*F~i|6TKN$>k-n#A%wjfDdi&yNncOi0UbJIR>@sQDK}rUcCj4 zOcm@5HuT{F(L0|p?7Jv=T0wE6i??RjXS zxSU#f04N)0L>Tj0s`RS1snUHoU*q)dK``X1Fq{g?FYxaqT1gGHLdz_a&`T8&H1v&>%uSS;Bq*5;%-Ba>BFXd{ zxrt;eZjlJw)rGVPU)JHX|DefKbXqC6w7{;nZGQPN_vz&{De4?Z+eAs z=>e;UpAV*BdC<-34)WNrQOgG-TVueesh33jAitw<6onblfgsghTdinS^wYH^UgB?c zaAh*ke(s`EsGEe{>86ElI)~j-=QKMkVI5$Uul@bU19?nNoi|ZJIZY6n>^sZSRJ-N+th$4|%{ffEgE(kI1yUq9fL2{lsfoh`uBJg;D!$a9=|-c|W@PZZ0Nt(G1X3Gg=WN zuJ-dXs`?;HdoV~Gfi(E6%d#avrwzyr7`ziG4i9h_`i~obm_v==LVzk+jxRKpw&>s; z?_<4r2<&r;n@}o9d{=F1lA~HbRrnhtt?dUtTZ0>~xy?x;Rx+_j@q2*7R0H>|*_HRK z-UfpAmRVVe?WAfc-4T+gU{3(@;{j%Yc+eFhYjWb81FQqzjg3%zrN*8rQpjkX26R=o z8#&4@Lqh?RHHt%mhq$?`n0Lxbe2sSL(&XyH;i8c-Qq&i^AMK}aYA)}7{Mw`tPq*m% zShz?T_FV8dcOU3kzC9BoYA*#D^Y9$L4LcGP^iXb)fmdTZkBLz?r$JGViAcQLn%#%9 zfXfbmA01w4xrlUfOgU%$j7#RQR+tklRkx2ASaT_j0o`qQjC z5@-}$c57rvTa7A+ZIH8!T^VlsddCPeiUd^rJ;;&XACD3Hk}LfBd&ZyRH9m6aso+eJ z@a2%+ZBB9EIK|J_qNtxPr3|M?<@DQ`U96H`{Zm>zlspc*R0#{Wt6Z@?UK)l^5l+cJ zu18`?kMXAwI2c|sjY=)qiGJLIQgZawN=NmunF$x$YA#_)u3;SUd6U%tfa~_p%_Sv~ zCgN*=ZqB{K>sRCwpIG<(Mp3(1E}@@VTC6sIE(hUl^D&MP{qkT7QE-8n6l zdO&7c8!09*f}Ws#GyypTx~_aK-)7SoJ^Dgx8F7RMH3X6hd-aAg#9ea8o)B{Q<6P2E z(OOYF%QlsG@dq1dQSbWgqR#UaaA<~}+JCE{0E67>R0$jcV9+)n4F=RT=tl>F4pRrl zj6T80#Y=@3yF$=S1_^DxE$ zOSaN7t~EwoXOOfruv=?sk+9%0Z2gJq8bm%~tLV8(^^yt_GKtM7$@MTfizOvf+h*PnNQFVS?o8GsC89bWddg`1%<2d>_-rSZJ57 z$=IsycB4Z{tIQo61E-X16n&$tenw^E1bYa^dBuuO(#ta2-<(k=_Fe(u(vMMPi6}}#W%5!y1dDpOqr!eRwqBNMYc`1W=_b%fq zW=?X!c;rB+!4xp^L-O0?RQtU|gc;)v)~O~pp}PPAeJ7U|=uaw)$~`h6nard!hpc%Q zh$>BlZ3I=4-peX~lFQzObK{-?WjoFqq{lnRjBTxh_0^l>sVV27?8$B|)uq}xl{9n4 zi-f&b^@FVUZkdy2stFYQb;>0nbY(^LVs&h3pPsw8ySi|r^bhDcT1RHbf!a`2ss{e8CI_A}u=dofPLt}^?=2GwMkhN! z%n7v|5ikNtYlEVHC3h6EEv$^8&Lu8ca)u{T>4~t^WA&l&EF>P1gk{Mz@10Fw(Cl5JWzG zZl86gU}g6W9%%N6*9~R%Ib$uF~!L(HNY7_(5G6ip>aNThhaMdREji zJ-mxoCr8Ix^{N^3@FR9biOi?y$7D_I9CfWLe#6^EHTee`Qcn(GpD!?w(E*9CzxEP= z#4PAc!7A&iQH9S9KmTC0Oa!7XykhwkF(v28(g%g++5}rovL~7cGq5wOWQuS1&7}J* zog031N!%_?a&jvHoyZaL%$_R!3uBJ`Q*_eQ#VZBEyUR?%YRPt;l)NSK>W=qg6xW*8 z(jBgl z`H^|{PNJomcnGu~5|cK^lRn#EhLK*+fatbUCN{6MESZYysO{6Y$`#(U_b`N0f3wfWga#%l%XKAYR8miM= zjx3iC#aU3_8}DmLH+cJpbNex9#w=+En*NX~ewf6~lxT5&XV=68iPEUz183F`VqKC> z91z{s#Qoo}pO^(kL;ztvg3<_X?bBN%|LrI*hD_OObuKXD31BV$MlGHq8y}es z6$yc+K<=a`aODrZml7x;>8Sx$EYHQvt_#l2wMv$8IvC)*5cuB%NC%)eaJDi)>dNo* zdlY^%S`lu5EcJj{Z%Ob~p;M1CxSdu$?ttk}e4#jVo1zTJbzk=OFkw`qrL^_N+k1K)OouQm#)geaoMyz3O?nTLXMR_Kmpja9b|{B&$8uG^7h$9G0qhvBDM<{?^!=ef=-Sr zUwdt>G4~*9C(svG;}p>-&C{8B+6BD190)x#4s$*m)OO$sGg0VPWe^3cB#kkZQh%=FVCEV4|kN>86UrcK7trzJj)=$NwQDYK;U8FY%GWj+hPXO{o&V zcRV~QcmFxp_IP+Pu_NRq3p#$5xR>&x9%k%o8}G=)^LCYI(mmT4Hgor-b?Mt0Nywu$ zK-`of{WNmaPfJ>5Q-AkrjlkJaS()P#6en@3dAcnT3&%1yg4e=>$-2FV^A5GWy-X0n+Ts8^E^T8?VW9kI+ly--aN#yl?%AF_ID@8A@EDLbq6g;h<-V*w zg}rp~MT{I~;%Omcq)dh_7Jm*MSD{FJ{Cd!J2YFSdUhr}v;`jpnCPVj3L6_~Z#|@67 zt0!w_XX8*R=J*z?_u{o@M2qIVdP2M66I<%68L`aZa>_42eT<=%apHB*D@}=D{u%6= zJ^FGo8!ct)6(D_MU*<`jKHKFv^wd}4OBoV7XsV6yf9=$>E6||p;%gKuL8+e)(N$48 zqQ~>+(`*0lq}b2_Gpq>AGI_gUh<@dX5Uz0(`W+JwLiFbI*n=IyE=*qc&-ZL}1amS-bELfu~DCp&Xqe6r~gx ztqx?d0qQ$Pv~;!L@7th1Uyo!%9^mw~(fFq)^Ov4qS3ZW%R35l!r#y6#F1-}BzwP}E z8|?TYzI%k#8Mjk5o$i8sT$xPeWY8Yf<{EgcXI{OA9rl&%AvcY}U5S|kAC>9Ql^UXh zKk$#TlJfmTrr&SX@vm&Ixyg_&eM+zz^O6Z{D&{bEc^H>(gL>j>68>d#3w=a(Fncai zUtAMhf8l`1`xpD{BFGc6c2p|Pw&IfuR6?0{>$WM9>|xiqR(`ugtbQ?E(q~lQHpD6b z)**H@hTWyay^L<9(~u%bG=z1flsE|>a)_!%>9Ba*;boJsjnv~4-tn8#vt@Xne{*TNZUMLJHA5Acw)o$zfa+dy*yA zr00ac zZf6;vF_4Y7hU4!8nPP{hRF_S@NPm0Rs!dk;Gh(WNiiLpZ8>7>mEqgkxG;6UR$wX0W z^GspZ(@pPrC0Z?%@?)44FcyZy_MY9zaB_``9r|OJ`i)~*vk4au`x80u-M`t2?2n*p zMdG@+#BzN%rKUeS*Xj`|Jl}mBs@Fju>~v&ik(~621O$BR@z)+iT=jxx^i*~8b-_KO zJ<#@bdg#XjQOwe)MJI$G1ZUb<(wAIVi?qh*AMq9#9Pk($pEGvYUah<`L}FJqnOp_l z#-y{NHdiHm_n>N!Y0mZbf%2DbX#*3pVg&L%(8w=X!~e&1ZQ>BMJ6sP8c+0_XFktuZ z({26|*Fa4bANiTf$2^9;rC#cAapCV#R?+5laYKx&*AR2lPULe6rt7pMm|aGpc?7RToz%i387C9P20os+q15H+8GLPs5%)%!zdhUkghtb^dh{T0P%E= zMS|Z8jY3qu=(kDw>cwNiypM9}JT0d?Lxi~rsU}vZ94=1QJG|`E38(A%RXT*V9`Hi+ zN)o*0f-)Q=L}ZPRLNporf9v&8K5&`i+LKe+Nv zMXdIafUHgvpf~{s&Q0f%11_*rNwYgeb2Z=FWBBp}Bne(mI==*1b6N+L6K(Nr8lp4g z^vkvE598_{f!DMlk#A>`hiufg95UGASQH4|H@bAhAfTw4Y#)dGGqrK!toDKp!JS64 zazeE6g(bTV95C>BzP&uOWZl_5z4b2kgagFcc@BD9!cJbjJ|;uF@*!!}Ef* zYZws?X0PvLrfOqL-x=@F!41o+6DsvJyT>%~Jq(TcPJG30#cpQ>G#4!}6LqlO))P;1 zd1i4c$!O9;J<*SOX&{h_ss{JdG-Sp<9HjbM7bAepaObpeeY zR48Hg(sO?E?zTN>ctpAB_eH!un5P`FA3w69$f;!a>D2J( zDDSSJ#L;Z}X+d`@KEqdUh247wz^z{I?yy&$c&pw)aO{Fm!i@QdZ(5X7~88-n6{soPjJiu%w$@AEl>k zo(~k>l#*nRSQ5-My>TjJQ!{QE%0}!~X0{PE@80ivxjK$I6{Ht;DDJ&N?u8;_WZU$i z@jugRT=5CxoT@4kYXo}lg+9>9k7nF)me47%4UyURICJ>0X_Q_nmGZbLg<{gPf_+B= ziIJ=}UcB?UQFrbc$wv46KzNgKbA&cEEy4L!-MS&DjB_d#@piezlQlMaXo(tZnAom? zdb%4t*NU-hlfZMUwU%4o*+G~7ydp=}Qt#VXc#aT^9MY#@`c<-GPX=Bz!*YmgB?2-N z(gic_voJNhii>7B4yovx39~fnL5_OrofyU9X|cQKaerp&HJ7*P*%``TlM*N~>z~jz z{8EIoD#_<8j1HP<6f0C8&z#47NM0(PUg@#}n#|vf?|BguD9les@^gjxg3MqCLEe-S z2Z|>r;7kMX@fGd#;dT4MZgcM;1eEo{HI5EE8RbT5@B#{INSA~!Bdrv94w3=GxS2`w z0ND$E=ed{vKHl>GEwi%L&;VA-yq@lf;fzUoxse35@Tf6NngqO@ zua1@NU!A5|Gfh)_GZcG+#TTHXA9Ul;jtBvvpx~9sF{gt;kq%fExpSAV=pRc@HBek$ z5P_C9GZ=EhE1;SD6+PESR5}%F)Lb{mp-JhY`T0tvNxBc4Ck2Rvu)Det-2@81`FCr) zEEXIl-1J^qQS<4xeenvHaQJ`%wmT(Qe6ISQHFWapp7p@TZ3C|-XWhe^;{&3itOVhl z%&^=&Q1nsQukV*rNindtaF8M^COXbjBvZMalXi)oo0`o+S4~Jk!tD&V1cfb52R@bR ze>fHWs0S(vsGd*2uD<_mQqE9U!nZ)1*{WTKz@~pmGvncdiXJUx?RRQZFL11bJhPho z>0@0j?ew0k)Ko#n5Nvx1ex*Tro+g63zR{)r)-q0jR0M6e0KDnb8&mL_3}M8M3!@wX-@=B#TCs^8`|s9`=a-kR*;OIAOnBvC`(Pgyo4e8q5I3oxzc8JSBz`L`*a9$4tYL~!_l6RRZkfHUpL_Hx} z9Q^f9;@<7GN3DIGwrz)MnoUFz33m8ArpswxBHjaE->nB5T8EzkemAMh zqcgh>a=5GTRZ;jd`K75z-51C4i}Hv%wTj}KB9D`GQFFBpPa zc6G9nrY`_eXkEX4CE}!|)(G|P?7~l0+q)a9fk&C45lD3{wl}up0>nU@mkcSI%>|L4 z1^q3q7NR`{*PR|g_Xzw(*wAwdV}+(L$Ay8Hp3;qtK|L3FB)CkN$U*L2Jny%SXx_;* zfhE=CsCaF5TYz>JMHFec(mSc8QW@*rA;hny<2O9`a$Y)V^R32Pn=Bz73x+yX5vKUn zXY}Wx?qhMJ`BIlM; za?m{~E)3PTji~>|0=C#_p@>5F^#o;K3k4659`a$8GMoWG%+yP)p-D?L`~Az0J^}9UGVqyGLq0tZ3~LG@ zuCh90umu?;_9*$Ybkx5WY2JgH*UL1?G(w;#{%aj6*Gw^Or$!3J-37{AwwDFi{(n-c z3s$7os&VqK-_Q(`ESGsYdSIFj0rs3>_aCVz4`y8_B~}O%fdF{BR^a#=1vReNk-(xO zK;Bmr(hA-@!Z)qbPxQ-1Jv)}@JLiqNU>r$>*86o`q@M<qg>wx@uwk0Er9(yMH9u}o*P8{JqSmzYZ4gPhXL>~uy!G> zX*p1F2S}xY^geB%h89?qaV#u9k&uY&i(a;>pslew2oE-pOx}wY(X{OyJMbTfkFc3z zWrZ0zatR6-{C&TN2hwv--#20>y*wI9;IXGYaK#jRf5pfN#7QD5Yy;2EC4c}|fp<5% zE64B~Cg`rSC(oP#+hmP)73th!ozSRT!w4Z>mtT><;yq@XTgO@`y3kjaYnPJ^GdR7Cr>2wAFn}%F> zvEnvcaN!1b-kh*)=@9b-LS^)Pdh`^qb^$Lt7~lqtq4u-a0sG)izaR}xQTOBu_&TzE zXJ7ljrf4LxI7Fe#&pQ?i>~oNuA?h*3FdUhrPfM7R~+ zwpKApsMBP3sBWKy$&(_^A=gjEBCIGRU#|zBL6&Y0GpX&5GUDTaB{@h_c`I^lg`i`S zY?myvIRz~!{bM=PqXbAiBFGq~Rx%A!uTdlu;L1r>>33RvuUaGzY`=?b3;HZbF#)zi zrv%wKx;P@$zWmK!H~Bgub-sH>j9xd-J^zFd`RPR59Q<@#NO0|9y30JPyS5xV^8XIZ zMv5QaHx;j7BeE2{DM}>Orz=lBPdm&k`W#vSh*U$GdGN5~}LE=B$Z&P%33=UwZpoo8zVWqLW zvo_`5ShE1Y#`gbV>dfO}>i@rg&YYQZs+nop_nJv4Dou;_nwcUyV{Mh9Wh6C{3`J)e z%970GvV}M1**092nywgx{G*{N}W&@P`YZM8qL=q)Z_%F@}wKEz#_ZGl9Lmko0 zILcBApKQf{Q_u_K#xB)Az7D^ng*`Kp9JLC$H4&?#pS=Ox4dF9=l88zjY~dc`rkW^d zmIqL0B%L`$c!`-{Kmu-~hIM5@ev|03_pyLeG`08iIGmW6RV~=&psJ3D`e5FOMnh*& z)!5Hv$|$h#FG|Hv0i1LvNZk4;GjhtyCzOw` z;Dn=S(hLCQy5WeG`z*Bw0qu+l1`nBS%7}&66&dcqg64k>ULBxrsx0WddLpOZ-NjiN-&VQkd1V3d8UOa?F`jN9h;_agp=S1B0WVh* zw|T_mrl9GHe@R4)N3nx?pdYCsbuODrJZ#h3xkW-rV zlcB&Ii}jh^)zV=r=mbA&Xs0WM)L)SL;#o^_?oGwNxpyqAScc2!f;NCjQSZHJ1+Y`9 zfzTyD8dgs9V6U|}aGe!otbs0Di4^UDP7RZT+AujU zjCA3Zhw*FM_`!Aq5G!CO%eNLubMYy>Fg*M`S?NDl*b1i{2E=ivn4Y`U-zR+F*?xp6 zg**jY@IXTv6?dK0g1=5r6Cy^XSC)sEG>L%KkLx&cfy1} zEI55S-(|jf<$4LD+LKG>NGwE0REjQSe}TIeluD_2eg6urchQ;g=_fF*Ktb)`~Jx8 z8v?;ACr4OkHAf*!-wjYhfE4~1g6BA7Qf}@U*IJ0+3-X5X)aPIi;Yw;n@D%Us-h2AeB}4JXewLD>XE!dmMgpgi=Xubw zc~|bmrZ+s=puA-eOUmk%UqA3}A42LzW!{rqDC0UR1D=z7%AlXSoA=;j_t}-CkFTKS zCtm;Pz!7g1XPcr&of+k?9vbw4>{ah)2Pv;wZeHT294Z`RCF!T>{3DTB=k`C~$3fr2^5C10Zy?D)|=t79cwn~cK zx&7_*;=|>1&k!IOi1@-we!6f~Cy0bpK%eF?6uTWocP%A{%*B(G+i!GJfmwTK%?nWKHbNOz7iu)qjT+&IEkQp_BH)#6%`IevnWO-E&n>-h5Sb@)fkpsoQg;au2zklYZT zei)f|xVRI46hlsEX(?P7;)VjyID)vl0xJ-i7bQq~w0$)G;+*YT~QS!^_I{n_w8Mz3sv27k&e}4@y6F-1Ntgf4T{H+3%H!6fJ)3hFRRLxW9KEzz%)$-Gsc2-j zoWJORpi>tuTf%vSX`4&tnwDOm{@_#|PnUIDDsCh)h`{yvl{TH^kjm|N^V@IeDQ^G> znsY|eVkudE6Qqv|WE7$o#&>o+Kb%awGa!WlnOKmPXd};#Oe8It78^@4*!%{GHaF2; zKvD06lW%38^m7#CHW>>D;X?5bE}>6$zNqclc8hF7@M(Aanb(3+yumb5C2qo96!9W^zrYlqY_P8WN0PU`v)yR%(_ z-uD}y>_5@2t2{0{$K!{yOicJPQ(ruEx<3K%G&0rWXQc-Rd1Oko-L|-D#I)(-I2hrt z`t~zE`xj}uL~mMAhHRzel<~4OxbK6Sme{llDd=V}WITM)xlrluG0nAGfC?JBq+UN{ zFa>O)?_gN!WOUN!lyOo_qGga>SOMOkaGquop_#(UN)0Rf808&PKYbF!rr=U1tLiGY z4o|PT^vc)-zxEGm$x|daDbhH?ZOoZDrKqeA3tV<=bz^^7j-|xYXMQDHv{qxi>}6nN z6!M||W%hYHk8`A<_Tsq$nW1O#t0y`XviRV={~SHUNVass80hXq(&mq#&?FYPi(DuX zX;HM7j5e4Swz-PdBZn3lL_Mf~S^bP;1=Lqnz5;$MqiotraE6&jo&G*T%f3C1E77<-tHAp^b{J3Q;$D4wJILa39aN^yrjWX zPeu_P(a+7#Vrh&nv-JwY1COQQzxejAE2N`;<7I!?_FdR&;@(VHZagVXUQSsH)M|PE z)b@PE@;;qMldREmf%l(ZPcjQ*JTbvutFabv`|*T&)}K5RTcx#;4fHrEw#IV_cDeRqAGg z`MG~--j0D*ET{C2YDP|_M1IK*S@;rH!jeNElusby>3elc8rg1X+WrgrjjJ-12`~w# zEGuHU9AWwYHj2=do%lJCbC$ulD6r+K$5;={O*$B9QIK(}f-Oqh`@eQCu7=bWkKIjd zimZgrW3lUN8N|17{EKDzyfeCQXmINYEBrNW=0h*^Sj5Ur=2d0e%uSlmF@j^6NxaES zvx3Rpe=5u0McZ@R3ymHjs%;GQvXNd#_*@kIx}0w_ge|2*Z?4<-aJ}YFkb^{b;Q}_$ z-9-YDhpe))3Uu9`uu{osSk1mf>4_jpYXik=Mu8zYA`+ux(r7(OTkEZP%AIy>5X&=& zG5y9<3R1AD<2VEp-@5Ti&8Q31@|ZCmBw1uGIqXC4Y5_=X(O^&uzVf@E57?{OWdV^r z_Obz1Nv>t%YuJ%V?Uf=wpx!vh^7@!&(+i~c8q&G~GE)J}oBZR_z%^^RP%Fdi4^Ve8 zgLX3x7};YS@>vTw(YpmjE=U(ul06v?nZJ8K!RYZNo3Y;GH1^OCGh_Ob?Zj=IhX?MT z1Sjb0WlJ>x4NoHiE#*Z!#apSwbRhSxxTgI~+pR1+)ljb4+s>$)ij7!Zt zvF#+!&0$hnbYzTTu?je+03x;^6!Sj41 zQLvk=UTIu*MK`riK}zpZb}5bMid6=Q>n%&xL#czapcvr0zB0kKxHZ$da}m16ahy_@ zBugJ=5WRHF(2jG5zgb%`geVsJ3njAn*HW2EZs>#?ywosNfp@8#V6(u6sR5^~rQ2Fa zL?AIu#qkQNiQY|IxM@h#xS4}$to;2TRAe@-)_&PY6HBYMg#E`Y;s zQBIWrUSRoLq=X5(gOqze*^*22F1PN3c-}L!sI!;TUSCEcZh`pV7?c5!f#4eD;Kob0vTS2^GEemI{0_0@@4 z-11$&k4u@Jz)S6FGVWY5xL>~pW>#O@B$5qEtG7JJ{cFGO+-`gEe(x@#PE+63nLJAW zrO~QQY8kbr?{9pjl;jvoVq224b8FpTpLBCru~5p!tNO|x`JwSX=cEAp-($m|q@ z(u0q(?S|Q*N?u6g#|~uy9j0@fEYTfRgO0r1<@EOTn^_sA+;+0cvM z;IiHD>I1~sLA5~JonkpkG24N(x&vX}lv8!U>U&4Y1I-%NiV|MZ_D3mpDpvVn?G-Pw zY+$!CmUj$zl4FgGqYKkWL&0AwGo@cJnGyfKCVFq=Q2pp(qrnT-Tr*0QGxemk`8m@` z!Eo*bMf)Y?*A{8*KG%Su1~tXXzsmY0*tW8-r{^W1?OXkme0dUqVcQcw!I4wqlVWiE z3AHTi5WVRyS99E z-01s^#r9)^U07(SV)uQuTo!Bnq30Ia8yJ$+(%1^9r!nhzNtN~)nxi%H)Uq%VV6F+& zPNB8(0pCHZCayGfU@|ZmB+WDu=)+8CINMoj+v_F0<3Rj;K0W#%%yYGcx$K;mdPKc-T^l%qTtdy zj8u+l6$MlCcgG?3XK=0=<2gSAipph zi&lG8^v2~`+s30ObN29JSiT|`u%rOe%VIE!{mu}1v;I?;Jp^Y~=JdOuK84sjOH67} z?60`W#H=x?i4Z!jYrx}sWPREH4WUC0{sNgVRzi>b=LO*HIlzw5IsvA=o7Q1O4-(~A z#kdcoER)C%>!xJubWESJFC7mLLHjnu?ODnUq$A4qtX##ePR_1eV$hB#f1Y8@YRut|yiDwoN!6&VD9HZVYm%C+fx;kluZmks zyP*MSCT#2`F*=QWk3z09CB8*ENGYsXx%xG5;>wAl$bi?c7_IM_dejr0iq{T`j#;W_ zrcnZB+2uY*W%2v_MfKeA4I>T8AJ5~Jz>a0=sRno6-~7Di32)0ctt{5r9muSB#4rup zPmKzN!yeJRFS1s>l-_$SHE_Mdzqj}nH=xLzc6`6X;_D`pdzrgkoUP%0xleC3>^qQ> zsqmUX$kw0#)F_BU;cMzF+g;Yvcf&UmzEW@I0Y!?@oU&uUgFN8h>|{%_?qlQq1#^e4 z=RyBM#vkWv!^eJ+?Jc)nhWv$Y5c~x!V-|Wl*Ur<6dh>csl;Xq6IQels#IcOz8KHs; zgIG1?)B}=mL!Hg%o2)v|r!boo8?y2Op8>E+CKb#M)@{%2&lNC3Y1CAI+ zc*%y6&_983=g?~&{BG&7rfVk}XDk-DGKtt-@~@^Od{6C?pwWl8L5ky4jHP48S^4vM#RwWx7HYJ5ifdAAXQ)OiI8s$Cb zHDa4Agp4zg96?0+CsH~4hJ)hHNGK=#1^-Tg1C}?t*a}=-kBw4N*ZHf?@|Es@aJ5!h z_hHkFX?mr7l>M$!ZO$ke0grg19XZ5oJIKsWjitT{j58+-cUb;1<&n7r-$OqYH}>>o z^p$6gZOLU6lcnTT*_ww^@85*0F2BGl>WY4e*_Thl%W!BniRlQdWfZM@v|h)^2tL=$ zNFncIvuy3@OC28zuFRO&fLa_tQn?+e=|;+T{=_i=_uj9WTEnrqXaf&e$Dn&mBjTl$ zK4TF9dENm}&xITGAY=i5k&`I~Sreg_LB+|Yc->Tvd1|qZD9W?!!Tx1GJY@ zZy*8n;*I>ZNfq(csP8fVf`*nLaT;`!YR5H9=m= zs)Dt-0cJNb(1`3`c`Ipo-WZs9{#tUBYY;~*ee#1P-iB0L<}&2Ze)8au4F)bzm5flS zW@>{|mljI_W@1%FmHO;l`5kBe7MeK#K6iyW*0AKJ4vK5jNxiGrB$lArNjo!*49Xg1t|h%{JF)*uqrdX7yz2g0teyly`JK+I06(t>%QkK(Sz*Bh!?N+Q?dQa1 znM}!&-Vu6yrD3ZRanD=v(pk}M=I>8>sPQ|X_=oRe*RB?K9rN1-8qrflO3Sn>zJ=q_ z;Ehx8@ey?;QU)#SK;A9#)E5sESZs1!=IYaX%zn4YI=709CoWiqI8dc zIBSKhZfOKK-aQFr?|OdNMdSC@XgiQ;#Gwb|73Un_&onD_D?NOW1feCxary93>!g6$ zle}luya)DR@y{wQdnQgbt&ES+(KCt$>Y4-N;`rI<%)~fY*; z_54V{=>pO)owVON?j2XQTSADfEu_MDQFB>gZ5kW@@TU}Lmd|09^!&1w{A)XKem7$k zfK|EdMv*CG-ujyf4gtjp$8}S}!Bh>nyoG(T%d}Do`YzFva1EhaJ=B}cVrbv%~?H7zod#f>#C_b@B_@9(t9V4%66lhmD09J)KX*@iAMH9ET2JM z$=RAM0_yfNCY%ow&VtLql}x*kE2gVHNxkc_OJ9hW`CvenPn4QtIJ3|ODw~10jWJTL zlx4%Elay^kf`Ui||Mv#sy_Vu#9QjZfqY5sgJ&`df$n3BL?R&p0JC+)C-OecXkq*hchdJ&Y5gPKx`S_hBgaY_D%qj~bP06L;MxXJV zS=-dlfsZfy+1HVhcaT9NhoOf&wUvBh7rSbk*{PWR%gx>_fSE${5!C%hb_jC(9S_qy zGPc2XH>4Sw2lN$uhOL;dNzTMHcF~^FL}Itv;y~Xet(h*ojbSKQpXMYiS!+41XJZTzDsfVF0j*=yiv! zcrCSMn*`+u^PQnc&K#UvW=L*p8-Z% zf#u#e!6HhzRyCF}+50?L_=D^S$Hdc;!rh(Sp8ad=7BatP2C;Sd$>IjS&Gskzf5>G$ zPcCcwvD?i|fc+O(6dfNOv~QU_6kAOK^b_S4Wd+576gANBx?l4Ee(HlW>}H~PqIu)W z#9{Dmp!SNoYU;x$CqQ2jbE|E$2?e@dF~$D}-V!j*0qCO3v{f^90d3Fe2~FtmM{q4= z;rz_XJ35KP>r_RqMk!cX4ct6hIXw5y?W`03NKYIG?DJXpPdXnNM(5R;TIYe5DSymM z%MI4tlGXx;Qe?1!6?ETBah3EDeqx;Zwtmk|Sj9@P5Y*4y6E?!KsK^v73P$_;d#jB9 zS4(7LO?_YV`6Xw@v=>0wbXFgm|5LkZ*Ej6rdg0eEj>=OW!cJxhjnTMvOvCrq5K>qP z_M8!!hP#ZbG|JYI!8CE}wcrMP!cvHId~Y3Nd`NDKCfdJKwOzPmQEFyZeGcgO8dcqp3wz4F5~@YPnu;{Sxu z>a99-c#7^UwftQq{*EE{8+Rb`ylupoaY;P816I!9=E^5Jv8^=zWY($*b>%ez|DZ*w zLoC<7s?^TcBu5O}_T|$ggl=)w1SDDa>&oGECj4lq;=NJVZZd`DCec1+P5oTS@~_c$ z5re0s6G)l6rpQ*chDt1Uql>A)?bSfqRbQy|Ez)N~sgpT0#8B_+@K?_;R@UxSD>mz? zr3E5Ir9kfUGatVO^F2(^6CfIQ^?bn&;iFoHWl7GN>1yNhnO|8F9yR7)PpDc;*)v^) z!zE{dl6m?iGxgjqFuG4>dFPQuSJIq2=q_P=HQeBkiS}J2$ z%2mu$JCMUL{{o!)*iUubQeiQ{Q>KuM#XyuiqjV*sPvw$T^aE_&!5FZWa5e3yk&Zym z_yE8{$!4HW6^YXoo-2KfChrH>3Tk46Ajy7IJ9(#cJ=oYmxiW=>+q|d5DUa_{Gl~Pb z(aaSg7j)(X9`AOQE$hg+K~a(MwybCNb_FhiIPx)^bJ14*m^6^Jhf}cK(i>BOd?;Z~ zz)ka*7_?v+xY1w|dB|+s1mAtim$@xgPAisQy2DT$bK=a#+)WU%0y^3^DY(DoHh{4B z*Ov2T>mN(+^kEwe`9A=c!u}JWyNsy^{Rm#B0L3KEYg zYuas~H5aYO>{#X7#e2SlgHcu{Ye#v_{@6SX^j`F<7cZPMCI`TxZ5~Mx8-U)44{u*X zpUr@o*96y8q=&ik(^vleE9lEOexLdJCSw=e@?Fv~)rlmq@BM5ZHHNfWq&}>S zFXL?gBRB@yknEgK$ARg}2NJmom@(JNga5Xk-+UbC5CB1NZK-S@e&+cfMB)jFLOG)M zlvK5A;cKK~5xa}8crjjli+U0gFsaIIi!iNUtS+~SOrlE6UlgR~7o7nQp?7WzhPI(g zyO6nU=Q1-ZT}?Tzf z4Au&YpD+!o{I6L;gD!oHuS^seT9-a%dXF%OFWhjJoJ=FP#SQI5o$Kv()EczLt{_S?0Vd}azsC}kU@?(VhE zovoB;q#^3<)Gu5c}i7_O$<%< zV0c{GBeU4O@1!NIjw`c3ntSV+E&iZ?s!<`*_+!uPrFeQnCYj|LgIS5(0PPU!-cFvf z=U1k9t@drR62IQh>n@sZn_hDyd7p(o)N{Z_oMX_m2w`FJaTEU&HzWji9mGb@>b@U|&uS|L41jI9)`z_IrSp5u zYL0BFu}T+)fiGlm#K}t68uC{8L0X?qDv3~^>$sTesD^w0Mp_TC%9>ejua)$SQ@ogO zaMydQxUMuE;T4k(BgIugO}@7L7@FC}Q73h=vW1x{S_DzXZ zYRK6;Bob4cPx{kwZ*_z&aetUTK%HXN| zoY1W1`SR@P7lm1uoE01$i6LF#+=5rmR=hX(55e{?FyXTdnS$o&gJ&0jp{px_`h%R| ztlxBnrxHAdb4QfzeybPyIwd=0cQ!=2pwkbPO0SV1`MH=FxH|#g{>}Q`GPE)o%{l6l z^{YB)i0gHYWF@~K>j%OAsUMU+pzXWer$>rnittHBjE+HRD^ikRURt+!`EuQx=Y+PF zr{|Wgfv|=>RWBC@xj0xiP-lI=gP^dJ3|ZEiwe=vlAEa5@U^ThhhshvCeTy zbw&p=Q`G@^OM<$^fv$9K=t>kWLUVCanO(j_bW!eaBG~8?ihwFLw@X?{osmK3sZYDPy;8G3H4-LCi zD%0{O2c^0zqEYV^nBO3#ZTEZGbW&P8q{gkFE(T8n|gDiXK>^xkfr4I<(1za@{$VjNiIHm7r zJXJdi^Vc&k>+P%vNy^JO!NWP;u?5u9tPQa~(;=R$V@n3}X5C2zg z9Oyn%aEPsNNsYroiEmxFN%oCXDEUM2IKhllx{)Hq5yUb z^69j;6(O~3LLPi;|2=k?kz4#xsm5eX=_hJPKF34nmLO~yW)AS7F>G~i03M!;Gda_1 z?(T~6naq0FtH{>XZ}OEdt?3P7*fE!fY#8zA!gV|>-UnyodmTj4MdYawlTj>3nK(GK!It|>I4wzB3iZaz4Xcqb1mhLBebzYjy z-*HL>oowfJuf7zI)o+G{JDC2d!|Kc< zkF*}n1>9BIF2Jrhi|Ijq2|$diAn}hhH1Yd}t&n>|^vawYUs-R{)$dos!tgm^i{|3Bq)z@M4t~K6Ab|OK}6LtjYf^btHATbF%`-8SokU)s{sT9X6;&d-at;fPeN@Tb45#S0pHKr`!7|IiS9H8qSKc9U1wQ zOa@D0e=Av_4m6p;fls zwDCb4xLtvEwrXt6A_rmfL1F6fd$*T<(BZyQ86YEN@E8G>SO+54+~2 zSIt6t*9{GZ+z`QDY@GkK(@9l4SKhS_<8%!H%IYV)8m*kig#8%5AW`wh74lrlPol2# z&?uNIZP`Vd!nJ_XTTcM5PdTQkWY{7`xL3FQDJ6xp{ub(!jNt{8@^`F~e}KlWukGz% z@&_RKJiwfkB{>3vTcu-)_TeVTN2$jBmPhTA-qXs0H=-cWd=CtJ1hm}-20Xg5LBblv z?o~ICh7&qD%#S7uR7m6z)+s;u1_-RxriFQF40Hw)t8;P{6UWKys5540gbB=)E=!{# zia}B`2o~wW+l~kht&20N8DU|&28jIhAhqce!)nl0s>9X zf1njh??2$zg8-`sK-TfMApSiAJjkxoZ#XhFK%-0Q&uTxLr2>S1@B z_(|g|({dHvze6`=ldQ1Nu8JHzelg3>vY^1E0w}skeL!~;YJ?4Hnk{aAxcwJq|CgX3 z!$Ut>`3~h}P6TfG{GawC&HH2^@%q9TApjJ2zjL-fd1>vQCfX%^e?Ajv3A=F-!-1>D z0_fgi#Q>7xZf28#{pRIEV2upm3}f4~7W_DRfn|hkAB`TUNuu3~mJJt6Y@RJuq-37l z*>ng{%hybtPo_mdk;>3DqefIkZ%ZCQu4}GxmYr~=*dP0V z=VvPRH&7@P#^=ZCC}4FAk$zk)F!R8)%-yoIy)SJq*=PDcQv&3U7GbSyZ%v0Icl#?h z4q@g|{BM4R7CEgt9IY0F+$hwRr8~8J!?nD14r$&#Y<6*|<5m?z-p8_$m7Sjfx%!x^ zUV19{%7V^c(mP~~Y<3N!3?`v=VPOnbUrVe+`}#hz3-1JNYxAEN#fxJ$A@8a_6ni|I0 zA2g=|xc=rOH0$mpvurX))BCixMGx?9LLMuT(=v$IUQE`=FIYjWt-@l5l}(g_1wffU z(`~~mz)Pq@B1P{$z~1RPD8iY1*E(X1X!r9YR`160`qktEQnpnP{Tq>725iL&YKOm0 zwxcD|yBD$iPIWQ&9c!SNRs-9xQ1r?yS%aEnX{uPaZ7n+D6nZ=4B#6r_SN=(lzw({@ z=XP~g)j4L1DPn1acf*j(>6)S!?cM=_|ChFa7s`JPZMAz}rD#$7qn9U*u zklW5lWkKX{rp%pFG>P0p_}8X}phL1XS?DKCH7C6}|NNs(%0$Gj4MiB^P!bPx`lDw3 z=z3C57Ftcw+V#LCS7ABWJIeg@P-~lQO)m-H13^JH8~?qR|6|Zb3}_zJ7W4yQquO4^ z6tncj@^?nqai-k_3C}F%qVavw_5tIPFVJ;OlX+xXV>Oacwd`$4Cg!V&(*o| zFoksnUh?Oh?(MZ;2282-j@xHa_?OlID{;iX$up?yT^64wtuF!!_Jd~Cl)F`U_%gIz zBgNQ0HJw^>0~1h`_^Zq=FNj!eh8ueFGP8a&NlrPbq@ubt;gp2;&XnW;RV`3<9&8DL zZ;VFmIpf@K-ZVn{IBZ@x{ABN<7~`PtYm69dsVpALBja>}A69P4Ed(wlTdu#ne;==W zzTzn8W;M|HOSHtzj1p*1HId5NFlbfu*mFTFFHvcDw1HIOCLa9s2w~x8SFQ}EMJB(> zes`hC`$P2}jhpX)u7Vu_1u2RhQ`NUZ_NDB#vgsmr7#Xa_!oS9J#Ng|TT_a9LA#_(R z9vm<24vjg)@fTqREhC*@fWt}`LGV6lqhQT%Ypv{SSC%BB|O-@285 zRrC97<&clxE~w1*NjzS4Ao}=ibY`l;>Jb~)(rnyMM(XSyWvZir3RsNfO1~RJB^_vjO|ohW(Dj=N>^04D+WZu zY1-XivJ(E~$!{f+xuovT>*ACKc0F@;Dlo7xQg(eNlD10vDC;q9$iP0vHaS$YiNx9F z^ozzCeHZVb$72Iw9e#m}&~L`nsnp1s8m0__y8Wzm4r9tqqnMbuJrQq_v&=XOdtpuG zGlri}rw4Rh%}fdbeco{%Yl^o>lix%G4Me~Z?Tc^gHP+^6|CsMWxxXB38R+zgdEjT~ zAo%3Lk3{OM)U<~8B!vt9QVGq*mQIzd1nekkL9!`1B9p&5D`^wpaX^P@EkyLEs=wNH ze790e?h^X3!UIOkGlp0_7t`TlGH=Y`N|B8wru@!H)aMTtx`jw|R{_xqlqy=^&bzol zYl!UG56o9?t5URi)Hp?XkvV!ZA+~xyW@v^DX^FnUc4z$op9>Lqkfq4oEcNsFx{D9b zlE@^?gM#|}%9Xp$Tp31^lHvD5)aj+pM81s3Wuv{=GZW1zncm|{0oMa+tuUuA6Y zt2hv{X0E|DV*&&06NkB*;ON_J&RR1Ac*_;>scthM@3F2Azmk<-|K&qMOu!}0e@7UZ zHM7X4!XHz9Fqr}#BR4V%QaTBI9VDcIvWlZ>#%C>VnO0QELMv};G9t~fzk+rUYN{n` z=HE$eXs#koR~2pgez-(2Q5i42nCtIih&=@|ryG21!2V9CXO`)d2K!jy~s^G@njPZx?mL zHs&^^GzrTaJDg0`pj=xQ6A);f-jiRMe*PnB&*B&CP_%6ozSZzu$t-J=>o!hM>S`#? zqG#r*JN=+8F^RK$M7$k2zspZCd+&8TUrn;U$x*6!sUZ0J7Rr5Gx}LRaUY0f`2I|`a zZ(CStxs;H4a{~D(@^7SWJg06lYu#ETG8m`!?tXH7k6M;`FO-c(!y4@8@bnoG*aw%}lA3q5X&#b}dHZjGNj3CIy zW?aWVC`fc-f(LzR0pXfbdWSDUL}n`7Ve;x5q$FOD&a68#<;YeN5R0J6slbo;IgB*^ zy=MM6-5dpq?orQrDG&ePH94x~OM8PXOlV%eD833>W6kqduarN2+bZ=|iytz}Q&8P< za)7_0pPgc*FR_PQC5~_@cZGa;lw>&Xk0F57^F%~0^W+u5q2#ovim}l_pQ^tu%*&bM z%xcym)>B)w@Rv2p-yR9J390tDXo(+r>FvLOFmB)0k~^m3vQ2{cM+7;!&^7=&=JvHc zM*Pv?uQ`VU-LoE-KPPjKObY5d)zOAF^dVD`;I4SjkMhc?IK#dOG@hII^Ftpx2Nbud zATwakn(_JPDKmqk?Q69TXqlWcJB4=|E%zZ#N$}4x>r`y@ZkY?D+ zVe`iQlr>FL{?TJp;OW)Jq*shyy?P-FWV-!)fRvt-w2p2gKf>MUpA@O3M1i>#213n0 zYk|J&&L|mK7m&g$2bV%uT1B6BHR9wN4}Yey@m;deJRYJX~KQwRBP>&LqQ1b!3#CWF{Wx%i==uPXxA^ElaTN=op|5p=5s}jm*pcnjkB?ryz^i5mx?MVB&{|@%Xhm@K@ObQE|oCU|%p~2o< z>95y0ZHF0UpRJm7;kuB(n}O7ur%z^buCFU4T8QGy?}w`=TM~Sz7WzY8jghr?i}%WGxjkMrS)=sH+>@iV3Xq>i~r(o2~-Y@qASPByMa+Ps<6_{h)w0pj1 zz!NRKd&OetBdvS9>WP7y0=x}XSnj3ioh2Mk%PnYWh~1$x59fq+^0?f6g5YIHc^HyP znE1)czl6v`>h&G$Nmd>DB@pkhS57d(v&N6|rUGa9? zCk0k<8@}N`eqC91)*0pArZjcCDf9jL`#%(sI0ACCXf`?c8!H)N+-6UHyc5shjDLAb z&#oyAfi2gr&CV@ZmHp(ODdJ9c;`HLgn}z>g4s-eI#0k>d`!+_DC^A!Cd_K_kmJKhx zxsHM5>j-UNgD5O(f~CT&h!>T3zGYBX*_ekB{rRS84rdCQ&0xtt}_XJz=%@#3`v}S+1#X zG1#20eM*3&y$KO`Q1};gx71mRGiMjyY4}4f75dry$ziLE8Y`aCfwm?tE&CkF5I|va zw#26jdq*eg9YnB+Z<#Vjy5F#A2Q9nqxf9#8dg`3>1(`M1siJiwEW#ATE{vVbM?d_S z9HagDzHa`!Gk=+ukAf~Cta9(Z&&dj3lJxm_m`A)nu#O?Wqr=IWkOpt!$F~Xk!RDKl z)Is+AR$f<+r=&cqpO>mfuv9{SWf>4urFzbYe9sCSog5oxMI9kMDhHP-uh*+H88yre z%8GQj=DMG#7)m8LA|>5-CcrqC$>44mOn1kxxteh9FGLXy6OO%4)R+hVlkcQDe$UP0 zQPP{$=+)>f27wkmgNhb{H#vZ|FM7|34;yl1JR){-F*c|pe`khq;Y;R16WJOse5fg_ z!(|m2^opu)pM|nle6N%D2sx zwXmAwpah$g;#;n0eT8S*xJvHOegCYaj)LB-mB-z((}Kv`_%`bwR@l=}_MU61)?y z+JdH+^JP@*(sAsi&MIr^pDgdm!&d(5O?t=wzqehAHAkzbi6kF^8_=cFEbl`Y^pbxK z=U;ie75X)fYzx>uF$(%S=RtC!E$n@tg8Zn*^hRze{q7Stg|`3$I_VC4O}_=ok+||9CSOR`mEtW_YP|ya~R$SSgjs_DT=Y_enn)^Zx>yFKC={MAkX0 z*l%9MW?MBQrwoxBVMv{cjQcgSX|V(3;EDHZp1nld)`9jx1uhL$bOac_WCDH_^$|oZM$rEL{0vg=I@^{4%m3fKyX*2#ttqdJb7k)VtukX)PdTS^rS1A_GQEdAg3)eH5 z47@iBHM@m{hAA9%m9xhPjlDXYOf_ZJ2=bI>moXPb)=W~^xzB5XiV2|mj9L+zUV~}= zNrbxINW^2=`*r;lz^9d3ZQ7L@AE%H)Hg8snW3>ZZ+}R#J9h2F~b6K|xQbjhUZ<$M$ z6+@iLa3^9nY7s&^7+kztF#_=qaqd{>EC?X`&`2vEvL&FIp{AZ_`0|tax;YyvlR|-W z?O^KgFq=pI^~891H16Tfck!5?d+^}tE|-^|8cvhm+UFd$3u^YH2j48fB)jMlN77YY zx2)GTXCm6SZ{2Z;R)KCB_!_Q}fjQIM3^@W8uFEvfl4tA1XEpt6oBr;b~ zpFM%evK;7p>XoLiq>CqBz$w(Dk;PQ1}|7QMdfBpdum~o%Dl-Ft`m~%vI1zEghz?jogAmknirpSrg@U>eqofI z0+`nPdaRai50{ahfxjr*P`rTCB~2uzb>R773NL4TM=Xh9d{X%+-GuL2_TJr{2;I7| zYwca^=S%#d9_m_v`F%HQ4r6dKzCK$*RyoF+?_P^af4{kjgr@-A)T@)!&GR5D|C*;{ z*((-s^8~$mSS@$s0L!OH-$|FOxTVrpOum~*Rhva0S?KT`fD)-9XWr7d0`#a#K{{l&~JqN{Fs?)bNkexr#)5fJpFb!Q))w2JJdg zKfTZoXZV`~8H+$=nYXIPk87bG&!L)$xIjuDkUB@RBnT`tDu0uu>74?sVujtPtfg$c zM`HUR^bNCX$hzhLwT8netkN{|MLV5@KGf72F4tiM4L25Ssf2u2e$f{l1H@5C>ad?( zUu7IuQ17CmH!lENlPE5RzVo52RwAK>h-WvLmAo2A*uykJ8>XOVYgu%g>4jnPblhVl z-~2Lm43_^Ns@^;<#{K{QzplAv=4zQ{O502|&7=@XX`;QE5pfQO4u?=Qks51*mZ4>? zX(*g9cA>f)$98O;^iGnxMwTcw2u13OC}|m?y_w(ZoX__A{?mWcZEkhFUe|MZJnoNf zmineQ(KE*KkI&$w9!FePc@oQ*Shoban5G@F<2!?0#Kn}b_aiL7c<_`%Z{k>;q#^6m zjFSN(y&l8~Q>Y2{8by_e;U+7fwM`V0PZumwzE&z9T8g4gSHB~Sw%STPvy`nffX@13 zYprfjvsQ<MpUz<~*DIMjM*qtk?V1Vo@d?>} z&5eq3!Jbjuvwsb2cv8)I72i_BpD>vgn0*7j(HKaX#Sj{PO;4=K`{lIq_m|7DER&hc zeV5h@8wGAMPB<~OmrPpdd9|frZ>zCx%QkIV zpFza6UtTclZM&UaC&Q$#kFh#$HDhK{v1CORwO0Y8I4nUEay>MqziV=(59vMwXO8Po zdv76$nNph(p^Q&S9dy)2s_%%~8!>-5zSlDBqDj#ys4L%~J}^!oSd(PlH7T@X@fOJ> zOYh3z(FcM|4}zo6a({p{7j2hYho>mC1E<71p7A|fsZg)_Kv*OLoSG0D=~G~f7NbwU z8_>ke75wUl;v*mM#>B8R#_hlK9x;vkHMlc++LncK`r3>Ow6IBzF)Y_luY`>t9r%JMr6#{|iPDDt;Ppfe6!qvNHjsM0-@`rBDi3R>qi;7a`^1>md%^_$i1 z5QE%1t|K@SUm50)+}H)ZVKwK$jv^6b9QI}z?p;L%`%HM{j`y9Z;G zFxF*0q-Vr#UUhRH;DMF7_@Ep2b*0fG{U+QvJ3~sbmlp`#Ds3eq-Bw`SJKm`5A4F_N zL3~)qXfKTZz-+uGp1U~Tq9XG`R&fZjPz<^Qr^$Xk1L%3wiY z7;4q9eJwq?T+H1_iXfdyfc6?pHbzO>(fZa=q^aU=a@{oD=P!6|*4|^*s=}*Ni~7){ zzeHJPP)bt1GMB5ZN=w}|RsL{f=*0=fMP>DO(KEO+Orh`F+xoH(7THl6~>~x^<7Kno)w1wLNv+t5+4Yg@I>&+BhJF7FBKX}GovKFq79@FTKD0lx3 zve;))>KkdVj}e^3>EuB#Ez$Y4HSJA{5_XMm8R8fJow zKh=0_Y#<-@5;Oh&G*8lUW%k273ullj5<0Q!396F-AXT6mUJPV#tPZ29AsYXLxY*KD`G9{xylk3i;5NcV z_r_OsLIup_b5GNr=g?Srqgh>U(1XALSqd`9rqDYuigVEmQ#)Dot~oPe+~_e{%p!Fr z9C$^!^KTJj_R1W3{r7JTl(5Li zDp~9MIbij>nm&E{ucSEDY<5bHnXm4zYw?u@U!Wa6c`hz48A-RM7x{QIPDx@ZOFbQk zk2}C@vBLq@K<5S&UI*-eaH`W> z6`DF0Au#1cYMZi3UcZ#XkK+WDG4Evdz*OZ`5S)+rGw@Z5g zDBZTeD>Ju=_1Ec`kLNiV6om8JZ}se{?pKM3hhUA?az~NhI(T^rgOwk+4tlq=mL3>_ z(HeHNeGKhVWhNH#vutK9Jd>5sakBN$DEemWn#^gt(eA9{YBiKRQQS)Fl$WP{vq??T z2s;jMZ8*F+tR$mNoExZh+8e*Rg60@ZZ^~jt{%RCq!^(9-^Ix&v{LJbLkPiu+zw1gB zeCq`yXMGr3yl`(^X3{kAyE!u@34m5D!>-3tncf&`(tzLWCiMoP?w26)m~O$Qf^T2g z{8hh&>Xw=461Ved2B+U&0`WFOv`Kqt7vAl-fYk7`?*{N%KQ}3BhGmTPJ@D#ljMZH? zldx}k7Gh87KfZ_&4EkZCac$kLi8I%s-WB z!@(nd7p-R{p~0@xY){laKvtk<23k2W;C_M3UZtcG1IX&@dq3H znhP07Uj-7uQa%eiru?GqTP$HCFDAJLdChtXUG&jyKmY)UuFe;S|C&);hFy=-(*xT~ z>p!FC7ip*1YWbEONycGq_ntcqrqT*H2F=?z-Lc4-#WNZ4E#-*E2>KDW(Gey{WqBIP z&RpBhv$Dajz?${@bG8<(wEtHIvCD}tb@0~reRP{MZT`P(&}Te zGv5KRDmME2hKgs0qyOhPtTk%7ot7{Db@lO9p)AxgAtOlsz_#GX7+My025x#r+pF|H zj~`%c8uE=neVma|?*#Jdq)U|#DR+za(-H=GmsCg>RatEH55OyN+S&Qn#IZ`|O(gM* zh|3E@=~m^WK#J`YnSE0bjosC@wIIA>)GXEi?#hRp}8G9Os)jJazQ?;6|Tb0LY8NYk54~D@5BhS$YhX6L5p=ST!TC1-NTKI?XTk z1*T~EuaMNZBa{l<%9mcSK12FAIVEzuJ6cv~UT*>9Q-j=1KFb~J$H443Uf(Nh&}87u zhYC8Jo=(@+j~?Vz5Lqvk^eIHvEBK`n1XSGoKr#g-U>6(g!fJX-eHRA3SyXqA-gE&C z#MC+HB?AjtV*s~j>8!AeW>RZ;-H>7-UAt64S~GD06^r#!_UuFRKI(WIf}J}iqLN1g zuWtw$>eDbk<;4o(mNOJU;3X7~2sEz=DjR~!e&e!1+sxCvcF?QdDOq=;TZJxniMarZ z18YNU#aqVE9`nlA69E@Myz9QRv;3oz>ru95K2`5U1l*fC)wPl7UCms1+vwCW_(A)T zxJB%kKQXsCMD;fgc8i`$yD=Vqd#}n!;OLcg->C5bC2u`&;;(@VS>7_(Kfxju1l9Wm zdpC=az=ELfd=(KvS~~yEA=~XP<_#$P8*WkRJNikTj9>^kYy&&Ee-So zyEkI1rgO^~s}teoB39E*C~`BU5Ga}r;_%5(B}OZCrzgx1NC_l01d?qu4M0)(F+|$W zOPvo1q$8+QvWHW?lVY{dWA*#yk@(oyC(z2T$jZ-%NwRL=BFQP=ZEaNr9^aGC>_mcD zWL;GKG2yvelj!J%-`3yo$dJU&Ql#t?zS&8b7H}VMS6XT4f!Ns z&M&LzneGAewmo@q(SyBd>Qv70YpeY(9kw)e(^-+dgbCGqwVB;!)cvOzw0X#2yOV^a zHw<8w`hSw7W+y`P;Gu48l5UD0`M5KxJZ&v$OU7Z{)9Hy#qLG4VZbB7fOh`^1B#@8T zO<=R1cxgUT9$*m0^m>O>liBvb@Unm+kb|ahM1Z2IlbU83LgywXc07UZGaRLf*vS$X)s2HJ-{<8} zU1?*o&b%nZxQm}|cv6sD=SW|RAoQ?Fyg&2y8z<}xlufjgr$8VT+4x5R8|BVK{ds7D z#Qy3LS|941@PkqnB}`9UC&^6uP0U?8uid;bh*Gq@wU=bE)cEo-2NB$mT$=+%o&kzFKbla2QC7@>=Xne@@D9rpE_tR7FOrQFD_ z9=diFdZJopCz^Peqe)w;BOWTW$Mz9pZ49-lj}VkEP_IalVO|+@-f|6hp4vcgKhzN~ zZO@!x7&N(&+9?^mfN_Ora??X)7wwClAc1Nq(ipy-(JPd@Q97W|usC*oEp(e!|B{k; zFGq>kD9%Ozf1r|ChM0L_P2X(&OR!W&FiBou-tlCP&cu>lHF*dRF{F>_AM3im*wXzt z9J*Elax&3vqzjU&ZWGFj$9PEB&tjd4mA3VmR$wDi+2G7z=?oLOIfd;9d`5LoRK>q| zdS#5&)>N4^{tVTl2N3)=u5n+c6FpMUtEL89B4yuLkAM6X_R$1#N2TD1&r2 zCcIs!W!9}@S&JCt9R{Z2L{+3dT!H1B&Jm1KE-VT=sfvf-Eo)&eJ*}}cOD9@ga?`6%#4CFQ{YsvtA!`cQ03-HLYXXPhlUwvPyannN^|trwVD) za#9D$R%t2k|4t1Is3~J9bZxOmSll6`B%7Du>Ue28Tuxy&G^Uya4jyC4UymuO9&ck5 zq_yIW+q7?{Yr9+qF<*Me(sa=&PQ%%lT}ca^2Cjzmeu~S~;s?A+UNBC%$7MJ!r=L1c zud}sH*Pu3C+VdnVQDOoaP+?+x3B<`Fiwux@=XKg11a4l|J|cpq`Mk7!)0RVwkyFMOvT zyg(yO4YcAp%fvD)5cB^JDX_#4OA=u>igLGy#pQBRF9u0t?dml&_ebb|+(gePIngM} zmm3ea7!;cAFSLR$Yzf+>Y@&2_WYjURTCFPH4clo~Xx%0p+=Pa9MDM`?jAt`L{pGXB z#L1b3FLdp2p=h@ys_h#@fKflA7q4}9HBX@LDrTv);)H3z8XicBb0 zdfeR^_yM(c+NDPe0LuuxEb?IZ-AYzD)50n?k{IipD!P?EJes3CapDAAyps0k0pp#u za17t%nF+%Bh7~&$6kwaS$Xb-qXDlUEhb+oo(!GZ$<$Ez>uS@X07K8SsmwGdzaB|y< zA@fL;wes_OpG_N0N%r>yYW18D9Mb3Zx z@t(cOVU*L=?QrS&P}Yi3#FxGC3pu+eV0BP1;?Rz=EQPJjDrP-i9|H+^a*2IC!M?Ik3U2Ly;mw+d;RC1ewq$|{hYF^ zywr52j7lkrviCN+XA-&eQSIZWgh^M7@?bY|!zU|&&LNKU5u7OU5Q1M}i@9602W091 zaauf+DS5=~ux%JJQZwCUC6N47u&FbUn-|-a1m<%RJe^`f^Wj&wGi&v#dq<6vd_f-C zB4G!A7Kq0ZF#zaOP|hH8x)f>|e4RqwTnBaErS6_2kVT;L%&J!5wJuV87pLSmZhb2V z^z!#)r_YC_)kH;wdb^{jdPu2XxAvn1V|a-c78zKpDUjcIR+BhRg6+=&wddIdWH)mv z`4U-Bv&Wv}+u+A0vdFDEEIef1Pd{UP@7@S&U4HcdG!0YVth!M4eT+p9{a-mTA6U8|JGxg>_fNsw`tb_~4C{rtq?)qD> zXOi|1mTo`;qadr|1!1?a=Yp%2EY5tWc34HXATBeH_Ysx;AhzJ7u3#PYfxykTchrFT zW$Ww<%pMsx6(XhWJa1LqqerIY<(xK0b(FXjR7Jmx-?=r`B(lHGxF&@B=C?dY<7Ohd zwbCItRX+Rp*qwzH@WUA|q<4M(9klM5g;$(ECZ6?M2GE%t!LQ7^H=eV=eJYk%$s>zH zCmd!DJ3p)rDBc`hk~ZM@?Cf^5!O_CnHl}3j*b{vIk_9bT_2=2U=4j4!EW%LtyK;T1 zck99b)x=~I=7XkzyLt7k=2lkJb*ohY(?m0?BEwLlq84`G9pm~`?#1LRV(P53%J!F2KQ0nflp zhbCKkZUq$irtZnZTF8zEnPqq?j{_v_FqvjhuWQBcjES!FizYo&)y|dBhB*Ki6$2w1I~+ot zoPslNv^0a*iuWvC5;YXR08}H&6Hjl#s8KK+uY`syy;RK4e^(a&Jc?cv?^$mkmh>Aq zeEVR2O7~e~PEkBmxR`qBJ4?!b4?=U+4+D3cWIb@$>@l{gCA(<`LuK8CLE4$6S(|1I zvK)=z$Cai1IBZ$<#G+$`k-@14xI$|(pN^`&f#7m<;zZp(d+i2_I@qRTnWZ+#Dy)=t zUfDv38Rk51Bdl}{Wn22agS{2xXTR~|vo-f?PQnSx$AeUvfPle=7llHD=NV}AqsN{Z znp^n_O$4k}NfNA~%6|Yqu(7h?Y64xmZ2I7yV4Lux*4AEf-^S@x^XGf**|*1Q>Z-zQ zyR-dBYv;@PjE%}GlxBF*%yw#S0ds$| zLF#TC_JI<}CVT75?Zz>FwDU5%1AtNl8&Dy4zm2?(*D<~+$jhUnMCB-u!`*`#$HD%A zYEIdAht!jf+A;iqwUnlma5e($Y|m!K96s&(*nBeIRY`mQPCMm+Hn5n|!f zG6G6P!VG^U2saj0-*3bsTt#t~*zq_OXfyhTED_f;qMKwFaSX0djx>v3Gq*vgkx1o) z1G7`XFeP#?)ba_w=5&y@6t}iIf-~K{??YL9##t8 zM~Z5yA3T6gCDPBc!q{7pp=_e^wI~bDC}w%W0p9`%rG@tHw^8DnJ%0x7)+_O|^fpKQ zsjRYhyDXlckELA@g8K!?1mdQO=ztmi0pQ9O?j;t^jG4)OWfn(G9u?=xb>jWnYwoxX z&Rqw4@d9z=%_+jjaqk*v^J!?h7zrlDo@z?RN(&t$Nbb2C2FA%#V_Dbyq02N@l9CxG z$+&tz={_BfzbwfpF)msPd0&G2+~i*%Plf^e_6+EjR`0r63|%y*Yd-@$8duvT^pRB~ z(y*?PTfK~eV-$77I6f-SQ&(phn^qK5d1gl30;8GQLs0GtXmuL$-C64SrRrI$g5)8< z<7EQvyYcKA^e;4oKF4S|J4b*mduR-WJFVFswrD=!XzOBmo7XPM99fj_*;JBty+;4;bTU0%+1D6Qcceb;RQdlxj@5x-;Xtin_=jzo&_3ZVN4h@9 zO`ds*R=C_QK~6@^p36#j>L8H4I&nhF$pF6#y&h^3b27oNOxjlA{>uElcAPd zwS>`^-=`C7d?_rfP-Nxf%ubi>Ncco-)Ywig|MtlY=@5yutr&jALi5&26v4x|ldE2? zU%+^MJu1%ph=BGJvwVEhx37R`=tJPeFuYY?N7S z=wzOUD=Dcg7>%@t*(8?ZG&s5~Y0S;S;!}|t!!JazEUO;X}2pM`?X(69f{^u^EN-$pMlN_M3ng6>I@zuhoK-7iRWY;MG?0lN)eqTb#ZwG-cu1*XG2`PB5s{Kp# zoFZLktWyVp?tPfNVthz2sY4b*N}feY$})=i#CuB7KB~8rvU1|^*oY6%Iiqb1s_w1< z4-T}nEK)IUXYq>D-~~wdN^F#2mpa5MKLmSiXRgk9?3n@I!WhQ!NaX-c$snbByFE!8p*GJv?z+5 zFvb)bQJMyoyM#+M; zQ_2;J^l0C<;UA`qYAlP|eAfW^7VP-FwdwJagsoi%^M&jUUp8<~oj$eoP4fFTU@JBG z&)7)6*%O!hUZ)D?{)3?k{jVR84TaZycWqeMV$c9kpv2|ko4I6A3m~QfZ70FqA)92} za2xKnKy#~@<(0gKv%BBDqOUZAR%VR#^4g~OX!UWS9qHSv65|w3xvL~uXi+TWU2R%u z;5~QTq?(+bMYDuMTYXWEMOD|9=d&>|OTyT`mimd@W>3+;h)u~c=X`1_sYcs3j7 zR#p&S-ZYn|Rq~CS4l@18_{P5Tr{?+?aClKII) z0`c*Dm46q`oGIn?D`bjsMae)W4@{}LnqZj-s?X6=BaI2l-Ic7=rA>+|yS{<^=IMcQ zIj<|O!30BzFDBw1s@WQ1*{>M$*qvlUu)NMk8fD<=jwLHJTh_pNP@PF62!8v8KJ?K? z7Z#$$Q6E`=(Ipk5{34Id!{xiKwPA^v6Y8wr?Gc{E7&qOMIR0LsWNAhoL2qAapnXx2 z4%NVYjFCfpg_csYIo<_%G-qn-%R!%F#v0_oj7hf zW*1A`h154KPCDK4#A3gRBPJ0eI&rjF?laUq88$Ouqi{e|pK#Mh6Y1w5InTfwEKDyD z;+JWG+v}j)i_NXd@oSdkplaG{G_lz*ww7`c30q0|Ov~cbZ)wP3;DHolA95wNqtT3f zJ3$ZDprXu+dT_-T7tBKGqMHU>35TT?Ao1&Y z%0IS9*Zfa$_0REv!;CKdKvYvrbay zzQA*vvl;*RR`K(#X zC6vLo6kVYrR2IjqZ-rM)F!J*udCLKfnIawfUSZHRrpOG8X%DGEnNVSbz4u8N?BSU~ zNPd@|<$bQYO0sdYhCg-cuES6|!eUYr%a>!hVE}!M*V=Skg{Mt(1TRMsF^PPcfiHBB z((Pg{DD#3VFCOHvSC^+Fjv|-~l5q3}hmv2QqEWq|;KlU|XEn0V@8@J1hyzy~WTB%E zuACrV8bvbjw6_LPE8^e^afc^4dpwf0HUTB&u`+;6^zo6=qgL)~HPdcV^X@+Y)}V+9 zt1EVz~zX4TMSKaXu$N=l0hgECZMKyh7XUD zbu}}j6X=%C_OgE7w!03NGETXXuJd+2ag3o3K{=!wB!W#>%2+*Cs^aGeh$xCKxjxUWidGmf#Au!ygl#zF9Q)vjHKVC1k_`HSyR$}#kG;t~O>h?Ky2%$qtPc|i z$0IMGj-cC#p#CzjjBG^`FDVgEyac@_g1Sf0?)R8x0=< zVs_In3BV?`>y#+$6x3+CGMci|I-}$it7Pf>x+tA^H}38bRgsR~AfN~K9BBc)X^){e7ZAtRc2=9 zL#G@@XgHMpsrldc&A*?O8)3&!2`D#I>preoC;$3>M&+G>UMzgibf8n&XL!JeyCQ?q z`X~+SM`^)I!z9`5A2;$Hv=g2fh>?CnNZg+qD?!YVz*#;6`hFlmyKP5k)lc0x^R=QQ zQHra&36z=<>!pc6*+lY}ko{{V89c2SXBOsXSN~IN#`PAo_Z>ZcIJ3EtS^CzoejoaD zDiUy$%vt@9H@k1M1T~Yse&!6;Wr7xk(kzX~OD>4wkK8?UB3l3iChrW>v08pfQnwvg zI{GdLN#L@9=2i4)i)gwwyKL7{@5=UgA-jBR7{uFNHws zbTMk#uhvZlAnPa4L#CA2eNFVe(1iggIaP}r*hHUVAj!J!9R1OA?Q_sM6 zSscXenOap{2iaYP%uE1Q`#rWSDLYC3^!)Emi@#D>$NGV*NwI zygNgjvu+f9$nnzxQ7KNoe639*4QJ;+)y(fuj>FS>@sE^b4E^(6Y2xqVkX6T`AN2$= zPE1?121;}kw;N-zQgMM2 zx#TYaU~nTL$DrElhS9Hq zbM>u!c5wR0106@6F>qiu`-#pj*L5+E`Dn& ziV#bZh-Ig-E;w;m0rD8APeFL{D?lsIK38b>*@OivH*qEOByFSUjxAe#s|G`9`mrpg zqs$X4_QjrCvRFRyE3~R8bp(uUz^-`e5!6(Ku%nc3=X7;Vs`!v<*#fM1x)Boa zC(h&z{_F$xVIBoHrx^v#;5A&73<8@?N!qMEN{faZ+WvYDwEELlA)f%CGLA-}*m51-c3KPgLp z2QLvqrE-RXPPuSO|3t`^R>C9>q)KL!Ex|2~^i?aVy17deHbxFahSB zxjtbl*Jipq!xwlBHc*KfKXHLt467aHxyRspEDERWGA=Bp1gh^F-I-~AI5P*2u$Htt zVP*85la)zlJw;m{K#8N`2shDLX7I(<0bxNS?rwpX(Mz8}R#**@HmW%5#?&Jxb`izn zvD#VCszXLk=GG7)>>Q;r)D{{h$NUHI%@#uCdPa;Pj@-A$pdF=~Jgy@uCy2u%57;E% z2gZrZLMeD`1X63X6R7rfK<6f}_ojB(Q^ISb?0*yMZA-SXie7GTy`XvqW6zob{#_va z^8*`4A(0j=t3nw&U4tHg7rio64`;Pbmr?VM9Xk^Jw)ig5QzOibc)dkX_4o;B{Y_Fw z2Q83G-@clboEUqZTvezDn{?7revLP{FhvW?@P)pX($9t{-Qpx|bFB7k5?K1Q8A!Jt zFy0KPAy=#nr8jI#pQw8ZCz;7?@Q2|ZV>7B)F`-YzeRZj z)Zn!1Iu+aeE0jnOTp%N0cFa}#I@j;VAvk{SU>(%Fgtd6Y)c5ylTGQOI{_Y4_dp;sB z)sHB8H8(5E0v*Wi1|0cbf`xyd4qyCkzzz(m9Cr=c%j1IG1ooBjT1|qee-T*|)X_5* zMWh)>r5QdLMOvpA&I;-mFgB_0ba1dqk5z#5_Owscqeb6GfdtgyFRy*7B*x!yL^hXK z$jjwydoK*5dTVw0UxD+t!q>M<88LpjGUE(!r9T+C!Kdz3GC_b@X%+POjA5;WMzhm$ zE3ljW_}G`a)q(201$dse{-WGhM z9*}|=CZd0&2b2a575_#b#6|`y(nsz=`{K0>-wsizmN4$vm8LzGP9mr>R|1nuu?6H( zd$rhDr&JO;i87PsI_)F}yN;Tf!)AluhXnEmCej~4mflk}9~jwt&eGb%aMjLC16lMC z;`&l<%o<|dUPURR@=i_^UlEG3J}KKoSy36s8&$LNIcK&@Vv+c2=%JaZZc2#mw_s3ZH>`%^?5|Vz zycU9zP+KU|)p%UGg?3gc1A6d7o^I6oNR4Baf=amfEQh| zvu9l8mv#@%{W){kE)V8#nk&*D>p)<*vyW|nD*LDl(vg&9yC}*tFlG2m>(>x+y^gq} zKaXu#_uv7i{H~%}_qBU|X858Wfv%8}a;>6bdSFS~{?=!z6f(f@@?||+J|t(iosVHR zSERzWUHVb4WIcw_%zTN9%W^W*e|uCd4heh)Jh{PJbC|K{$EZL@!>JkKMQugGHJd{k(1g ze$0VLpuAZK-ChbMC=5KhR+&ydumDaDNSl|g{h3)MKB@pH6f}c=LxjxYCz1j)(c1~> z`d!&};8#SB-DA{PMxKe(x*2mc5%!|>wh0%3HKdpo<~ufm`ejw#zt8q{CGJC|HWmr7 zgc3pLn);c{lDz)x!`L+SDcCcN`|nQcwiD!EId}F?8|Tr8s}r_!LQyDmd-wkh z^FxgS(}t~5+x^;_)2g1wIfiwuscU7beI68h(Z)framH6MrGi_$lW6A89ma^hJ z%Z5hU{y5D4cYeD8x$Zc~>NfYHEZP=FU*v{_8+(qeBR_rwf!j{f9ljv5tUxtlS~9Lx z*s(8EH!im7{YV8NHrHkg?(@`|lM3zm_Z666K!^#Ni7hV3r4W--m)qZiq1rscWW{Fq zw_3)jM*6Dz&>AFs#y_{{Q@%D)>gfgYT_w8sd5vTYb)sbhovX7c4N z9vzNpVTK`K>NW_!i{^IV<2IRh2ooNldsr*Cu^JV1Mm=)X^YPNl!GLsxdKHRpak1yd z(%qD*yQDi!BmkS3KmD|;zbXiCR{1syZ=9MG=<5X3egAkSR))eWxs{A}r&+-fF#90> zjY0H_!visTgD4ta+5Ha_^^HH|XQlIyf23A9gl$9J7ooW?pq~%&zlhfFrkzX@fpDQ& z6b6`%*Gz6?R5GyZ)R<6zhjE|oJ`+R#@&=q|QkPv{uF>@mEy*m|qjs{S55xyKa3S{7 zo1ks|?~3Q76Txb_!|Wt7`m0pO?N!H*8wS6sl&l6g^J$Taj+R4lgHcf2ZZX#{-6=g2 z>}3S5S6rv>%G`|ws15qD*g;wu%QoRDS2uGzJ_npm?@LPnd}CBt^o^S5M7!}PJujp7 z38Q>NkB9UW*EO@W!miMTmvj+uxBrGl%>&foY_Tcs#ND6{GH@hclAMxjLW*gk`y#Gi z)m0CjRtz*y^odfG7dWW~>I^DGfCgCx-C#rgC8Fy0x0P81cT>M+z-#m%53WYgQJ%<@ zw%fEZw4w*`Jf)OUX|OlGoac+So+AhLgmzc5)&hPRBN$tS^* zrl%<6z3EZ97;&w@-ZDhnz?5#Sy#Ku)B5;#hB5v}R^fod$RMw97l|8ZQ$O7ES*@*t}ph9~G~j#9Q-| z9H+QdAbXx7QZYp{NEzf$x9Z`~lqSM^V&Utx&|c+xiEEavX zIJ#QYo`9h#*r&8X-68mBo(QqT3-rc;uG=0Twq~5e0H*4V3AP!6Vut_0L{0(TfkXC` ze9Wz>ZRw1x*${PCrl6@bJuLx}cvt@0Wd7?KlVn0AAtqflTPeLu(YjPhfCv8Z5lH9c zS|Wd{%zCBDi3<#Rr0$_&^t-avRQKnw*%u!QYAWX}KD>m@M~s9V5qDge2crq5)edL$ zV+y$WAnVQV%+4C%6;Qu;t*kz+xq|X@XNJuk7g+Jc$WO~E+hy-v$?OaqQzck&G+Bkp z3m2Sj-ojS^?|slNv#mV&ju{P}6Lr}$yQs-k3p^}KkOzz)U#NaEHSxZFR_~##u4$4r zawKrQ!MR{b9pzMRTt( zLdGD|`Pz2|hHi|e&) zn+92_ySWXK69+W|O>Johuuf}Ek9gM2xL%Izr9PmaEBW~G~3?d57%ex56nK&foUj`E!y%c*i3 zhoXS68FpGYznE2z?&E1m`f^9Pk&C5s(UCD;;osE27p%^&g7Nwr?QFgh>Y>pE{`;|aIr~h@WVQuTDJxpv@V(fm;FHs zJ9_jLfWe6@+Kc9}F{)M<(wTTgZ zHX7hh<}ngZIy%cZ{+DhV5a0R6rNP}F9vx&v0e5HAcKWH8z(e6ZM$4~a_1ve#9dg913O*^QiEbp67s4W`^$mbI;VG4U&oPSlgwlP8GVVCeE zpyUqNcPp`mCHjM6BY6m=t7wOI=^lJD1oA$#IduF>yF_W62czA)4AoFG9rpKT6*=Tv zuvbTFmwa_{vjr5Q<99=1pRd65BW8iC*j{doGM0Jj1&yMEF>|*2U>6l1(Fg_%qJjH{ zSnO$&07IpsxTng6(?E8ONxZIE){*T!&qMly?iwl1ou{r7x4VjJH$#c9#M~w1RYAeI zA+W#7jBiQ*N4;p!^kekJ*js;0PuXoORl{XVk&>t2Xwje6s0MB!FEfr8s50rq#peQ1 z{|nXe?*=;46}#sc;~`({!1f_Ge$(sMVcZ&{bAB4PDQt_+mh2>)Dd^yf)e7-eC$Rhn z;)8IVSWaqev`;8f)XqDc)m#gM&~9Fp5y%2HOU1H&CDudR4hmf{L&y-{RJ;jH+N$_w zF?)rB{V*w^&-0jCD@qyGtTzS?sl%3xElZ#PyVTW$P{)OI)+mEP9&;ua25Nipbz`LR zvO)c;xh!yW*lgiDeh|({GpBcdL(Qg)q7O|2OxqakQH09bFgEr8@|&%;D4El4FaJ^X z(d~8U{26w;iH>F1vp)g$2uvp&DN#z~KVa6Z@|WzK_+3zz_BH$Lx&I_4&y=m)1N`QX zzVQ+`zGdg=s~VwCs;6sWAop+uQg(+I_`;;CLkWPX-!$Mlew4kR>o8HFMA!-py$K@7 zub^wRg+F*gh4Ms(s&t1#WTaYzrtJIYvP*a#EbC!!qr(aLKqDhswM_QtlyTu0+!mys zsof-~3c$xck>!)*#Y3!y$mOV=)l_~(NUen0i1;7v@$qFiB|k&LouLn(LG5C^FFdTo zQyEYr@(a6Y;KlHQE;%zwWV} z5n;4v?_SCxsRCI|G4oe1#G)X1u7myH>@@YxFqD?zbf?Rp8d<3R_>??g=NuDjUH`b% z@;y@LawGEZQy_OeA=!sDiLUFKpv#727tI@{Q_Q?Z>EN$8zg8@`hObzv%?4w$0XLn@ zr)odU!1J8j_6b9)`cn2p;9DeEb75xSN+{1FHWu4V$pRw7d;Hw=DvhE5hUmJfg0_U@ zut|q4nzoLi<-@F^+1z@k6kUfCGB{g~yHq^|0=Ak zLd@326RTG(EI=UU5lhZ1ls8>D;~X9WDv&V#wdMun!{rw^Q*L*EiEp{xoR zuq`|1;Ki@3f&#o*^*>P`naQp^;7Q`XdJKM|(RE-`E*mt>{W~k+uoF5Ni@SApt5Ipf z*8!fkQ<)DO1Fv}*0nf6@7xrw?*U=Mj*;(K${6Q&M14&uZ;xk-dh+-^|;NnHs4Q7#Z z`cU6-Xq=uit+E>7TByOXiv9`5x~3bBAM%UQjF}u839oM!}j?$8NHQ zVo~iw2m})ef#}X{wl`Q8hc3km=jwRHMse@GoH$pn%AgN}yu^pp*W1g*-zhg8ZOasR z^Gy@Rr?<~W9lT**)YiEA5;&n5LqB`=Dz?J+TBJL6L+t&MSGx@IAgtwLq;>M-%cQ~R zcQm)`CI6k%q733}@GO2;z%2q3#T6BwWaV)N6 zobjc2+v+H}YFryp=!N7vaD#YId%H;el_|VFi5R{M@P$JEQ)dO9A+ye$-fvX)94=0= zF5a4FRDxQ2Z8z#56d-9ps$@)sE;HS`Kk8~k+mP>n#Wyu zL-#uMahkB7*fI_C;m7sSOcQ4?qs7dtF*dQA$3**5Q%NB!W*oD#k6HD&M^&QW{0qc6 zYu&z4A|#?gbY3}ZT0aNeNSI%v(3e@&6c3bmg2h!8n0QFCpG|PVZO`$-7DT19g9yK8 zWHH?PWvhlnG%u4><%)k0zj;vO%8bJ280R5Yw-VZ?K;1CGnh?~^3x~SqJ6wjeLzc0D z4lzYcuxhJdsa9zQ=#u)5^QZUgsQ$S=qP&uBnr2(+t@oK4%k(YWZkYV$Y%NZo8& z&X-255I=7d$&z%OfJ!*7mL8266pw=A_A{LhD&A|qo?cFPPPwb#Z8S4BmO=uy!RYC? zwtZw){>52sH52|COj^pYm|pOZAM+l0$RQ)eES{ZvnN4~D^!$%tt1XRp>WU&-Xo(RA zxzK^X-v0k7EnH@=;U>1fyS`~Ekqc8?MF8MmsMB+q&$kHh3R{e0m~cTd8x)ns0`0)YqxCL&>2z3UsXsUH(8&>Ts^Z;C%D z?s4L2qWb0Hw#q`3&WXfyMnLy+afr#b4mlOP@D;`DN=d6(kDLjFN)v27-m*W>r!p^{ z1ZGzS#fd|lxRSR5X?2rC5W{S5*~3=rz1E*N4X12E>SG++cO>K)E8sM z2(NuPpq|XUL=@3EqlRhme}I)MO5Z&paXd>Sejrl6=%#d%OAyrmCly?4FI7Bbv}*#@ zH9oC>2RUZssVf;&@M}Ki56q$_e+4dOtMwYcTV?_?)Bq?F4Ku-RzJoIZKR8m_!Ea$bt~; z^Re9~#XV3WXPnHKU2Oh-yqhRxs4okSGaes}vExh`+P@$v7PxaTt>yDk%X8!Sg5Z&7 z`{a&utKpeP--8>m%-APZYan~jXqWN#;GpEgK+XNJOlG_-a|cIYHg)6-ep3H;2LG5w zI?1T|{gzj(#DXh%BmAVj``l&Qzq`q{T}7hCClm^VQTUGjIc`d z?iWfF{hYEZ*)WmTc&%*1BQDT5G`pv#)7|brr19AFu6gK=wfwWEH%t1Pm7tW5>Hw;7 zwZ}J6x#B{nJQCXRP~zF8x}#;23f9c_zv*hT3GFJ8%0_!BN!n)e(jMt9XWoJvUqq$X z%>tsC6YG@A_fWfQFl8g;cYymci@^!dXfyy%Q?1khe?LRx%7-dr+ z0DWc$js5C=?;U$|3{7ChGQl`BG4rBWkL>o>HZnlRq;8VWoSoxITW*bQ*{&V@W(piu zD@Ws#&B}-`;{m=zSRS;q2XKT=_p^Dn0pV5*#FREvduR*8YC-bP(c>OtpY1?=T}@S( zj)~3A26FzlkF!^2huBQzRsg8^#`*gkhEO^;0-K4vqPpn#!!b` z(buQ+|K$KhtZ}UBNzgP-Mj{?sKli2O;=GP9rJopIc;Zsdq{_3EhTx3@bwh{SqRE8E@oSMec+S=097h9o6~-#mpY*0x^)sR zs$Fh}(jq%0^X`LcyEb@BJZh_XNbK=ZaeXF19qCt*o0EwX50za5@}a>giPvd%Ky?l{ zUhRV-d(s@k`Er#2-^~-=nNNP~B=|D*+0Es04>v_}2NBq!masKDk@>16{gQbNlJR$x ziwe=p>!G!$(Yu>Tk#0pWv)(UO-LP{$@%vOQ=Bu`dRgIVA&eH7LPm$lvaU-f_8@&f{ zx^xOV+>6Fl-vdxl)pw2_i)xo7cTm$7b|IOr(a!Y5*M8Ar+TDF;OaiuXe+$4+E{?E- z38`?QA7(?KD?h`}jC@}}v8k2vDw0;Rjm~G&077Eb9B6bsbmcwddOh?0sQe}DwLO&G zv+OkXeK*gdf3A5F@6${ZwW9!L$Vrg)+yHR$);EhHgiyp7pRWp2BqHAS>O@BN7%O|_ zV!8C~G;xc;*FD!D>qW-bDg0V51%Un>Ec6%bq>dUwgT^CXJNyzo?Sh z(<0EsXFOZKNtXVzdp_p#zmKjF0b>^y*}A`cJ(UfL`oI2i3oDbIk*xZ~rgHK*1UmO? z{QsA!V4cQ^eVx7~o;})c4jHb*7plbPmX&y31*IEcbuLZoN~e&!dfv;$v>m^R1*PTc zVJ-QwmJ%-iL*ciQ{E86cTJWq_g4=y=G4K9C6M-jyX}V!UhPK3t`A}Yt6$~q!jWEHu zkXaUG%{G1;ctOEXy~z+7;KTLuWZ%OZWK}Vu{I{IW6g`D>nFbH$QT9=zbs%Xnh=6Vt z0MYkz5QM|`!RCFE%u`d-7OjYadv&7rl}2Pk zqBI-Yyg`cuoy6drNb&gh!J#{Z*%O6#M2gpw6}A4*gWWd@xk!5$9CAPHIX(X(UCtM61mwj_K8si-k%x(Cfoz}?Tur6P}MTQ^{r?rV91bm(cla;pd` z%~j?i0R&^!#vV(**)-ckXtD}xii5cOL423RY?SYT)y~the5V7e>)hZ_CbqC!KHOnm z`PwxP{NhpQr;B)C5M-3h*xfR@=!KlBIQQ)NZ>rr;v@=mo70Fd|(T^Sa8wJ%iDXy^n2|P5nXHZ|3L(}5B)Bs1#-6!mdsG^NM@iw z0KhL2rVH1FnVK3TO=xqiTtues47qTCmD1rGljnmZe#&AcedKrE-J$OJO{4!!dSSur zrKeh6ed%X!dL1LxXnMkDFI*TNviJz%GK*q$olh$qr-RE}y6ocS1V+!b_V(ng;%Gj< z0K3S&I{bHjG)vSO5~vv!Cp(vG5~~-w(XGO(J6g_u`4nJ1hvr2Juhz`l* zkHU--^vD%6NN@l>lDQ)rd=Zj+C4Fg)%+V|0b(0NpHfOTA!{HcPCiZ(u!Yuq&k^a>> z&2{B`614e4edQ^Gv@^TVTPAT9kh8TBa(~f$a`S|uBE}35!pmGWh4$tqWmoKh9fq&U z()Pmd*R4=;jyZ}8mg8^Ttio>^x_J=KovH$4*~*6#dP0$+VU@ExIf0e>JN(ixBpYoG zhYdaP(|30b(Hh_KI(xSlc{n*$A$9d6vnl)A@s@`NR})A7EO)c3nTa*Lh)nxymepwM>>?&La?0-hpHsF9 zu#|>XEq%Aaj=@!Grc0eVgiqtFYo)iXPm zrbQ)65Du>VgcmUGrVKyPASGbN(m>zwulPc{^6e+Q$t$|SH~OJP%AeNnac{M4l6PpR z>_Rpt@j;`jCg_KVT`mXfWN7Wigl^jiBYLL{xUe!bOTH;GlztS2C%09g#%Wh3N6?$? zD1iB}yE@(G`EGQ|HYN%&$>U7V5W^bWOZr z7tjucO@`m-p<6H%dk%>n#V9_4#K(%9ip9ApA?sngVgtV-5X?aXiDV+SIt~Lm+a#M_N6BLFm7(L zDDRFGB%^$fe(aS#jqJ~(*ar@r;@)^+I{M(FpY4H(1ucL85hG8kw_W73NB#1iO-rNs zdc7> zRgS7gx-py?<~RI1{O`7mua7b(xl`zw>r~%YXLVB^c^f)~158GR3}Xh~=4hoo<9gX9Y&=9Fo7Rb(C2{S~4i4 zt;Y_Dv!q8~^o{vz&=mnm=-IzAx0XXLODMGI1NVzn@U&rPnXFY*($9{Y+ODaPt6mwX z3T*7#=$OS=%)h7xM0WJ>apgFn9M0qs$vu+QW5m}q!X=V|2}A)8V^Xxj=}_HWBzYEI zfrgw?EZ^lO-ntpur@Xlssx*srB3+r99T*$GY>eBQN8GTDaETT&Z`31k-bnQBN0wyl zPR))?e6s;@oLi0;2=tO+xa-(3#anrpfLOt^XW5n1P`uV0Lk$O|&LR`le+qF4s)-45 zaELo3LJ%OiblR0xGvY+u>I(^)9sz`@B^02c#d&nbuvDkBDheF+ibo)_eXzI1L2D=? zOWD#?GQyZNl^UCyATt5W@_My(hV|5~hfd56cB6||!?LH^5eAUsXK>h7+N)o@t%Lr) z)$!%G&t2ah-7NInW3byxK9N&MwHEt{rq=dMwm4ATjo6OW)Ta_VO!@k6j)&~3nKB9zlIS+U-5)l>1ua!S8migD>!tpk)R<*j|s&G{G^4o$us6{$6{ zX&C@fGQ9jY*XS8EV=BE+1#zM=CPS?BmJ@+vG=~+W#B!#iMf9v3*rN;Pj<3=H&Lx4i z_R*?9j|njYjN#ms49Q6COZ(67N5HP^}?bkcB1u&GyGJ}f4Y!`p=*#@gxmuCi`wO#b{x=bG z?OI#m>D?_xvSmcuA|mTqUb7G-VSk()_Z+W$d&;W9nSt;BSTR%{zWk-crnZW3b*d`r z*GMuRFZs(OW<@!#K6pdq?1girZXW+a@o)4VI<&Ti((6s%D3Hni)C1_v5e>&@h_fnJ zV_E+#BiDquf8Q`rOxYpU&Zw3RtJ$9Ub9kj)+?Nx~n7oG z-v)IJQJFD|Ar2S2XVYq-#@OdqKccTSA?SA&L+5SHW(wbmqb#s)Eozv?b=GkMDqDUO zSQ2sf=>Z{!m6GYx%}VBev_`Cr{3~zGJ1GQ^*Pf^qyNSGVe3|39!+t-d16&h`tTQQ^`sl_r`#rv&`T|sMT zR1(bUa+OSdZ1D-Xi5?5}kZs=v2uSzJ%F5W6@H_3|lPRdn3(BZdeUEz^$#vm%+)uku z!?z!5mP`DP?AhsEHEL`878fS@HIbdrC6b=<-e?P)uUoCs($cJAV_)zC0%9uO@={?G z5l2B-P7g1xNMIB_gIJ__wUgY~PgZ1>tNH7JE;|MUc8H=M`&KQ&#|`ilo;QmYPHFE= zf>Yu4$HNp~Z~xR*>A#z@Uu`KAq*gs1K0pSxPr}}S zC8XNeCMUN2=odv_8MXttHRb`)8p`eoyo0PTw5S>*a%^9~0@D_d6b5oC-h7T4Sx8ex z{4ywhP_o)dT)?oZSUpxBeDVX8X}d>j*BNSznuQi^wh+z&4lf$UGu5Gc&5c?2jQb@_ zn5b@{f^RN|Zhy|hltC0G_$!a7Fj9vfl*@y;u#UHe0|m*U*nflSGE13uEYMPvwn^c=EQ9OtPzhZFkt5mIsKsYgsF1SuScW+nEW+ zjoZE*X>m4~brTGF|C5Bn`-1VmO4Hz%OK3Y9^`43odxN<@5I*~E+Cha$s=?^!i(ZLa zEb6a4c~V77=oaTbEq$0&5Bk=OZI*i-{IaiJl7N4t2a)BaJPXWCcg)8gQv zJs^K_x#nsL8M|XK%buxz*K6q-7FCk+ZKCW(_TjU|f2dlX?w`tjbjW5y38gVXJgvtU zZy3sKd3{I@{$(5tr)pR|_;510sg1byMQ*i1v7DCXcN+iQhNlTbG^t7Cq+(T(TgeM_ z)nX`ncgB{@Xu_q6a9XFaC(Zv1o4i9FAcKFL%Hmfj$AFKjj;G6Z@SlP+Gq%}>obUR1s+Sp0(VA4!%UZ(X2wv4bIcYbcAqF_K$Q3w zpoIScF!ehOwQr`Y=O_=Tx0~uI^ok>t_na46Nw=+sIZarUj?d>Cds0+|Gb~2v#0Dt&&sa@=wT_=*uY%5@7?p~_X%1~ZX2!85Za*;gOy<0x3)uD ziA|Iq>fb3xyFo%I!*x5Ax#C~WZ9T6zK~VfUZ})Nj)dP0ze>|!?q&@2=DJfy}n`l$}&Q=vtYXu(d)D?eK2E1itEjA$7}ka=0Bt zt%rp*vYQq28YS263;)?loaO}4Zn_y5vfu}DH#d*q?iRo_ll{&r8Qa}0Cu4@!scU-I z;Y%n_o&Nht*gG2byJ=S(2$d{Wv`j^0A7P|@P*Qbv8;P(Lg^V>{9vN7hWAlrGxnLTd zwGy49h#aJX7k)>&gMm2(Thxj^jYH6hVrQrxOL(p9tM)uQDVgHMgLG3`elXiM4sv}5 z9Rj@Fn=GJ32<2myHc2yVixMgyva@D^K=1jyk^nm&BVLm&WTTQY^BjO3IKI7QQApb< zxO5t=(Hb3xR!L1j+J^^$e8z*ze(+L6lq1LrFD1POlldqjspTda%GBi*41-&&$L)- zCSIOOIID^NhsZcF`bE)|hvs@yKdP6L`p=8V+KE$nBIJDKpk?f-ck-%=7^(BfF^Q+u zleB0HyRvTU`o|xjGrmN{qiT(LefYbZ-By(eWNgf)P5w;If(03;i5IUA*#yx8HekCe z{(Y0y^5GGW-Q9E-Ntjk~L5uiPIl%YNojl$WEn39#8+C}^`0d#7<8b^!Iqk>Q;D7zF zttL>Rla>{b0DvF#cm3Qj7zlP8A|4>B;h}yJX*(>(jW=ME4@twNky?<^Q&ucU*=5t~ z7NkBxQEC%NZ2@@RqXtCMYlLT`nEDP6KQyql!Oq+vpj9khZUd9+gGCP5=Z4~U%0a;W zJcyH{8yG&RFnrFO^6k*-(7 z{S`jG8=%wObb|xdvDJvvMx7#O2Vodcc35ftyjMGn#u)>34L4P7z8i-j^{7-bnx~#i zR_qoJTp_kwV~_kXbe~u$!4;>j5U{=4g5k}LmxZ}`UiByvqhr7(4em_8rZ@^GPBBcm z4Lekd+A;Q6ep={y9iwBzMsQelQ5kGAtP`>;t74C?5yuTG+9*%rhJkp?e(fX8*B4Pt zH83t->Lf4IJBflZGagL0YAV}Rt?78>?`AuB)yyphSSU=c>JfpIU9Tu`psHAkw^O%z z%!YXRe;z+{WnIZV{OsQk)#`e2vH8fk+fM#>?i%ckTUy|*_sYn<{KH8Dc$?c1-qV}%%U*#ZJy(Wft!s43<$$mt~Sb+w^CPD>C&eE40_7fou)5c{r& z>fp)TmVW_&r252_^*)fzMN4zbsG^$*()ycQMI&@0E3fNVrh!LV@^^Bft#)COI!H!} z88Pt!vqXFu)ZJXZ5!w+_QD7n-|4Dh`j?!;f`~%-?tg7r4?iwy9xB=&{v3-RmFJXWI zF>U2(kL-xPgw>e=DDi!(-%qK)roV5G zs65rfEf|Q9HVdHLMu~a;2vVXny8AD$K8v}|A0)(=g3P`ex}(NCk*!`R0y0uJ%p}g( z4sn_Z`2AzVnWNJDp5UiPi?4lSQ^M+2`LF_f<_jy(&A9+ckuyg8)(l)Q2_(NFH9bZU zPU8yQ(wO_OaI`eiAEUtr8{ju$o>>Z&BpF=j#-r8{jN&C??uZ@RhlUJBYUUI zY4`YLe?uj2XkLl%=$DwF&|s~e*J~M3a8H!@h_XyH{vbl4-`+d4bscd{XA{#&Dx6ez z7Uh*oOJv^+E02z^n>Fv)Gh+xCQ;ng!z|1j!W*uU+U@X`QcuXU!&N{FYwl+uR7o5|t zgg!T1WY-YO_Ug#PvF|Ilk0{~$5B|?h2Cg%eIqerhIW(#Bazzs5@H9YKT2kcyRdNu} zXUBcP{{+kO*K7@ctL%|c$)uql*5uXXnP9_7`{SNf*UsMd36;U^%YMbV7xVYHX}WfX zGS#tP>WHlR1fq6oekJd7B1nxIBktNtq5dVDxJRPszpUDEAQ0UdGK=SRO2bP`6riZJ zG9!bTC=Rb{xveW&@it4Z1ch?MFcLHra&*y(<7UCQbe_xN#sA|D)dEpPaQUJruQ&nw><+Wvxt?KLnw zS6(hpTMj^+^P%OoZqrahLZ4}Ss^4z(37qTNuDRPx`1jkl^jKc9wD?ze8#o=(m}A9y zTJu6^O*rJ&2AOr^n;ocAVrLG>dx37EIw}K}&c^;r$ zvWH4X8@~qT3Dy6ciUYHW zL4UXC;pa1t4&@;ySIEJU{yZ9K@A}bAB)l zXO$DLKMxNMomME13Q~3heceFED`)a5wUt~c56QGDUM^^K*Q2WjdA>HhxXps9AqrFS z@P@7Go_LVd{xD4mbg)j8(akz2`wf<2$99aM z$YsXhTNYOh<)0hoC9Q>9Wr0<|n+!QP{zZ`m_7YISSD;l-;REWm0iasG#@%NWVpE=s zHv9#zFQ-z@}+s&Dqj(yevU?v{IyZxGjGs0Ld5 zsm>rscSr%hd4|@Oc-k+JyQeL>2k69oJU?^!VESHm-MVu6YW8TlRy$xl=NVLLE}r`f z&1XBcTVb7OZtp2`^^5k^FVa+On@_AvS*z)Z)$D}DM&C8X;aIcZ4s!r350u%8kAi4^)lg)su4hA&luvKo#Mi*%GXXxqO z?>({ZSY#6g)$yeam#8+VNeX3eM0X_d708(K3eR@nl~bCK6)=e*PMxO|^SW1J1*TwT zz-T&MM?WA^3*o9jIi*j(l%eG{jE0`0v6L$=C|4j{d>Kb5!umT9Kyu!3RT2)pv4Bej zaGY#R)zeD^Y~-?Vi$=c-7|324!@GTr;%?JT+r4Sz9>h*FU9LW8j2F}2Gyzak!>#S( zK^7bz3Lv)I5Pfi+E7%_PQ$Qykq=LW{jrSEokx>Qo)YemPp5(nOoQ({89N=uMpxV1Tj`9(0< zb!ISj%$RuHfR5mup8nh*wFqc8yhGVHYPYaAALN)N7w6|=EiWH0Vb{78j;+%xC!q^` zy$(43WI=%|>}SA*(3}3pE}hk+H8EI%UKzPj@oubU@$32IxO(z#kVAyXH($x?lHFrM zV6;zFSPx4qn>II;v10$SQOBB)@NeBs^05=Z^5n+*F*fY2P4bP>$cRYQsKb!$mVTpv zd3D@?v0c>{t`Hw}<@|czdZG;kFr}$L#$JWzW4zYB>L9*ETLGd`1)HS6UQ=YPiIXq^ zFtD7cZnW>OQ2G@H5Sz5(+{J2-U7G80#L>@kY5+uaIaES^$z;QROZKQEN7#9yUEw4n zeyJSsf9>(hb9UXCK!mqc17G2rK}}W!x3QoW$m*dE-dRUx7>~{CZgyX>aq2V7uCa6EfAh_`=#bb6AP4cZF&fm!fr&K_a!a4b3nYRUY58 z+)9j&o9JAS_QAN!&MxVgpHrD#P-+zf$UR<0ywdNdOxqLG&;x(c@ONN48Nn61VWBjv zb|thsusw(FsGVqB|7w>i7_MleyHyls(FJ!6d~H-btF1y2MdzktO#2`ZN)h&n%94cb zIok5$ZQZ%u4?sm_L*uPWjS5kb_y1nBHs>fjRy6w3PnBBb)DgZ-jc~H_17kC*8kvTK z_XSMkHcq^_K}x8fHAznRo*NmU760$C1h?vuX@vU8DY&c;q}pY$*Vu61o#JLc$aKA& zaoHMV_j*p7ewb$z^J`(07P(t#yM8z~`B2q9mIPjyF{>^pE$U@mSSjQkJS{9;0=(l2 zehU6>QO0ZH<6sQIbx)+cHL39$KEwD?T7S9{ESmu%;{67A?T7xMZdc}Cay%lkOaQXWwaP0_X6P1vqORSf==+3+LRM#IIitx|Xc*?gU3J8j z-YHgw!a##wjxPj{?XCg!1`|NV8$(PrbDP$65?%AL?c-ODtq^`%q&)dPxc@yeE6nQH zvZdlp|5hj+_w6%egI-|+^z@jL>3S+_1%W@5l&k;jc z4O2;x*AVgekCn@#p|3117v}zwLW{2*up%xPi5JzPGsaoQIXqZLp2bqq0@$hgAa*l| zuYuNdqobF?&&XwF;&L78ay@GOdd9jrY{NrSi30OK9{_$3ZP91+=@Vt)M}!lB-4nFN zha{#QICN<8OH)mUB?@$(T(*s-hZyOr_MB+TAUQxgow;1kQ9fImjG%*HhF%)e< z@idxQ>Yh>c*A??;zg;Abnu66`q;sY#YE7ij=6|3wlc8Q-dl)Uq9%g1VQ~Y|x1pv8s zv87pW>TbG&avjUyGyOz0^hOEI-E{83$QiSymD~Vkg!Z4!A$V%1y4t$u7vwK)ZRmYD zR`W#UvL)#1Q~roId)v>W_w$eGnb?KvQ;_^hgASjx+VyCjj@L0atq#V{bn-f-iYvD_ zq<4PL>>Nhp^Q`R0Hz*4aoqqnJQX}xWZD?x&?UUN>14NwR0nyelP)~FKTVAbJl%(6EIF!kYQwP?s8X5D4keb5|Y#iwlXWmz!0XXObK&miM z`cKEa6ij<@^$&Rp#cEmzH7RSMm49$cm)pi)7erqP$agTxeg(3(fogw}c==03Qmi4{rD==$%MXQMHV9{>_+%S| zap0%=w1vwuvkkg*%21RD1yc=2;I+w$iGkH}8m33DwRC^N+q5aCK!7 zKMZ`TU`g(G-8N2T?T@<$1qAJ9^Uk2+v^uI{bH0 zG}9*KW1~pjz^Wm4{lJx9#DZ<=<8e4nd-s|`lccuwi}57`eEwNU&3!0)TPE+WPMM?P zb@Wa$o9WG{Gp2$>aDy%9KrT zX9}cR?W@R@TaW-rxQoKS&?N}?^p%&kXnBqM2)OYE0qD0zGs%4%^;|>EL4^2fQJxCy zu#K@$U}hS8^^#q2+Iv@-Kk8PBy>(eZOr4E!RVn?Skjg__Mf}2dw-{Zza~Ec)?dQ3< zw-$S^iUC!&uf1E+6f(M$54Jc0nw%Pr%)fZi(b;(Z(|1;8SON7{?~f3(JtNB1|2tLB zH=aFvQKS_6(Ic+DKuMys3c(D=s$wr~I#sT^tx=U8BU2q)y>^n9HqDx6gv2!X=6~4P z-LzpJNNU+NoLSr{ct^}SWT(8+H>CY$gtTUt07&oc50Yy=<=9k~4z2}2?g37TNN+96 z7#(+%u+!9dIA}s?8e0vBfM$u643Q+0POF4L5@OIIsQ%kVhTtk{hVIysMGSQ*#`jVH zq8G`#eS{l#Jt*IE$S%Gcj@}#SaQ>X(s%7x1_j=x&Tg(aJX=_alM*Bc(oDF;{F@Dky zVQZm$1bCOv26?dUj|WxT2Lbfju)|AP_z2m}GBpA}Y7!+UPtg;GDwbQ0nZ|BK)xR-S ztHpni4RIlDdXdvzK3^OTWmllheo*h!=n#6GbPUqjo1y{N9m&+LFkprx7F{iJ*U<{K zAPS7&G|Y!qO@X@dk*HRQV3#TvH-`WcqIM0m`8DA569)g7da2;id%~lXIc=JO@8g*v zVHk6RSUCkR`DN)+dS0c5=V!neT?P**7%#t|Oec}Z4rw=>Q_mT7$Tscy16OiNx`;1y z_@(~n7@vhRtM@)L#(yyYa7n8LbHO7J8!Yq=`n{#+@@e+ORino;riCxIul(@nidDp) ztxnvs5qO!+Pi^zh;kek1K7Z+}isWmOTu)6!>;YA+Ai_1U$loY;nBgLglG1jVNk&{S zt5uJwvzatn!dH+~EG1g^Iq#U?in+Yks(1flE2 z)!!t!scJZll5T^;7C@s{+%gIq&Dw{m30mSf)QxlX9}jnoyJ;le=N%U=?f5pFS;yY0 z@T35~bhRtiA^w%V&SSmJ}nrn}BzoecOz_X4vfS{*t<9c3zZpG?3<|(Ph{{$V} zGcTgVFktNRwUQHO`H4F`{?jXY!_I$)Gnd-o zE~8`qwgXJAuia<@I~<|m8(TxX+h0=M#Ft*|jxS&*Zw11=rK|yJ`uqzM=I&Q~UB7H1tU105fAPKIbuE0S|6AqijD9bXYywmq zmwR--Y06zF{{!pIMCi>bs6*-rUwMxB?q!wEp#3Y!TzDsVSZ8cLDVQzl;=#>AR5#XBa^y%@=owSF^-hq-ic6(1UD@ z>8}R~W7?8b^*~eu)|CTheNS?0tvch0f(Ot4f0y$ z_!zYmHj)vF-R8xyExeacRWL1-j0uW<90cSnQyy&9C{iYooBG75Xy$m+_C|WBEKyR( zr>|{68*SnJMhi)tZLR4LX$V@#*Qw+_t~%aOJsDpA$9hoyj6Qx$j5?-D0ZGoe^7@yX zAeKdYwzY~;Ff(1e0&iZ;w(#V#nS%E1sCCz(m<_kvUJwBe{(ZmUaZ1$lQwRgkiU}pCz}9Gx1zh#-npn-oujy1=SJT7^%=Q|{D$m4*C!PwugZ(Dh6?fWBdPw(8 z=e^vC3h@4+HdoCg|Mt=V?Wlz43xa?|IBaH}!RRjo{g$1sKrS4zLJ`V#o0eiI+K-te z1;MSMuv(HFLztV@kXgx^7yyLSCW%63*_mbFlD)3$?kf5<%GxOHkMC2Fb~e!0hm&{> z5Wym90(N#bO3V_qONnm$vgLf00s)`8*(4XRY1S#3v&3C#HJWQ~ZpcmZ_Rk$2fCZM` z0*I?@OP8>4t+osC*-X5*IT1o2;|YKy|4lLFhxoaf(?NTl@SuhDe--{Yd+|a8Sr4c; zx%D5(*82r_3a;~gWW$FQCM9!C;x@WmpO)Nffjx`+KY&V4`mq_)D~5wYEDg$p){PGI z38;%%RN7iC+MydpzT!-m4d^})SAGa-zEf+k*#GP`Ws9?Hz}M3uf;Hq%UQPOqF;tgF zEa}ZkO*@Eut$q~QbtO;SpSE=(5mv=1&9i;^5A#PI*g!GXPIDbUzEU$#9mNa}4+m-+ zQ?G)Wv19HFt15Yo)%v4w#Q1zus;ybXT=D31-XUJ&N=Dw_yv8v^Rh8l0AY(J2NuOp> zqYM@4hQaP|HI@f{jw$r^Clw-MyGiQspix(^o_ST`*^OtVgtQIwG^_m7Yg1-AM(zm! z5Cwo?n%8v}Y_lqR?;^Z%rPew&SD3%Vs3S(%_e@zRpy$2hm8BZTDdDPe;ZC)Fr`jT| zn^3YPMh>aN+FB^T2-tWKL4&}zyVYi{rWBSSz#iXG~pH`$Pl6gtfd<7hfRk7w3Pl+9Lp<;@^W z_v0hrh@4=0lerXbO%q4C$l&Et9lekwKej|_4Z@!D{HhKkPP|o9gyY9QD%$kgRx=p^ zrdQ!=Nfb+`KX^ERK$p>801vTro_~?ogD3R8{m?tSw=7p_1-ZJn#ihZFj=Z{s=pT^Cy|HcuQ?1fP0{Eg-j zAm8N+KtWHEym)_rvZ}a1DNd*qOoljjjwS>eso$Y4(R96QzS1zKh50U+%49wJW^u%9 zW8$no8|0@dCG#})F(4KGOrYFoHFU`H#^I>9cB0fLQ1%4oSJRWsEq0LY1+=N#6)t;A zJ!o@f;|s^P6MpIjSS}xqgw`xa4V8InuA_EPgfGBrr^)42nGfO4B8e(W5})Q*aVcgJnfL+fI!SSCN=Uk`fkB6cQtluW`x@}5sctZuBu*ZZ z6ilhd=5_jJmvc(&Mq&I2r2##MdNIp+=hNIQw)I_l&3yw8z5rI%Ju6I26 z3gj}{6C(N*_iTzcLSCn6Z%#mdOK8RGA+NA|`#uG!z!um0DlLkVARZn^eqnbj`g`Tf zhp4A4o?d*A=JiERlHoF&?X*f-+0_=2Q=h)&=|_CK4X6WdkC~l4?fgH_XdA$%4>~|4 zbnYTR*3OJHFxYG0k)rF_D-mPpCa5M$T_MwGcQPl8o00M5^%c*6vh8`l!Ba{ZQm@zl zP3WZ@*wcDm)#5JUO3iNo8nEdDKGZIGH^w;QX}!m^sFf|tpD6q&VptRS^fJ3yv`dkj zTqnzXk}Fqz-|}uJ+=s+$^()N`+BMAb{bBpawySxzXQe8+)5H;6b%rTYn`na%Zw^|s z@r{Z2!Zu5i9Td$UOdxA~qw{<^lL7%&aGU!!CX2O=X+j#()Io6*=CGLCNRU#zNdZWE z+ObLMI|DdBaWNURWAoB`jO zlr~^&arf%gF#uLMRpaMxi`#(Y6E@9TiV6b0^8)7cii?fQ7*OI0dsiM$D-2L~&?0f0 zshY8=-egTc^uru$r$=bm9fDz_Y5DjO&VE!)R92&4C)bFUO2l9=84C$L+sC4gO!sj2 z3|BjB>O=^v5XV?}ec_h=(mh2Zd(d32ch^B@t_UYjegKswnG}1szP)*cjR$MR7rx8k zLOmpCM`OoNcWt*x13i-`n4npU-y#uMl6-i85q4OU37Zw-MYMG;6_D>Flk+??%k_kY zc6m=?Z@Wq5g++OMX|6n^Q}NQ_LT2-dNJ`QnL{_lbxL4X_2cic1^Piu$!+$j&2ul6* z$%1LVac9O>V%dS7iF2(UPWa4sbIQL69;KdRAT+6NDMwb!IeqT1?@xW{|Ng-S!Rw>g zw|rN!YpAnBTFH>U;`IY}54U?=#hD=Gw|gDR7#%$injL5w!GNO0_?6p7TdZXR-jn7x zrw-0NN-_kFXh&lj(*a=HJI<}9W#3^weXayqJC3|xc%Ya&p`@aWTR+g_>j$h{)+7f= zA4_J2jxMvYeaS*Oe`6=!DEms4Gd&1&P!V|pJOPvt@tj|yN~R>K5NEz_=sOzg0D1Nj zGXeQ?=AO~23q*1=mG=5qY^xCZdK3Nn2(_~^SjB?&J)&x))OXf55Q`YMu_}TSIC*8p z$tywbWmIo2Y;gfMH>eMQZ1=!h{(%HygH@lgLgrWyZmSt!5R&&d0l0eS*m-yXb_GEDBX0xK; zuRruinW^2L-3rgG zCAaj0ZQP=u)|rq6$uT4f^qA*2+`p><%WQR5)LBEd*N{3sw0XRC_zO=PPt)KAGJart z$28F5M!$kk)F1J=B!1ndU?Nxn?4wwZUxUSGHl}a+0Ijn#I1myFhJRb^o9tf=paY0m z0`8MOUFcBhI!%x;v+DZ(b`uv@SKtFBKw#yGhcox@2OaASg9A;5ZrO!Dt65^`wJU!* zBYkmzXybFUjPZ-kxQCUdJw6nX*VLVOOMON;*iFB&2z!p=^qACGEzvvD%*yS!_~IC8BG{QL63H zjnWV`9nQ(d_K?TdLR8}LFw{?y|N^m1Vc>ZyGDKCBdXg3`@tx^ZIJE0 z7}d7r$s1cSh4$SDX32HKrW+-D2H&8E?Ui^5@n9pnbup{oNV35x;7?Vi;9IWjP#+Im{`$#@S92UWTxEY zfFd&k@;JT6^|4+mXhz)oq%LwNGG833fo9&5WWJGf>c-i+>u6PGc)v>do<*wCxA=g> zCs8JV4o*61K#&}2JM>Srxpg&Emj z^HY>eNQO76{A1@UXdK~)=p3J};#ps-_-PJUH22Pp8$n<-9H8k=Z%q^HT13mvd^C;C zbWv(LLp_9KCwV4_?mc%R_s-QbFi~IXJ-*oJ4ckkgO|*$UnZdna{T2vqv`neG3nef*$c947fU7p zzNwQny-`z#t8L&ZA13}YiXR1qUY2LoS%ou(E$s8E{=4)uoCWd+!G#w;7;#NMqo%pAKPYb~3XYYtG`LyvW zqlM$R|FgQpBJNDrsrhT5Q&0l51gdb#9^E^Iin04z?PP~Q{)GmHzlwGKaVXgPsaz9l zyqGSp>E+a|UFoOgI?@2n4TJ^>d%HuF^!sBzAi>x0szhn5FmUvWaW7m_IJc!b-s3jl zI6y_+-R#en`H~4`Go5B)b&cd@*5BU`QOHU1gGyWvU~?gm%dHQ)-!9)tAiWS<;unBA zE2S1e)C(mI7;qXjiGz-4mp~tImjiOOt9+?=uw7(5L5j2i11h*4Q8)Nr$^KCVUYC+) zl*J5ul0Gq(-6c924GiuseF#hBaaKhdKA!FoD#TIc?2eL&2xhQ}4SDW{e<&x+j7x2<6NQW^>* zFHcIwbj?PrWdLxKy=Kc-i0Ya?zF+_QRBf zhFo)|{G9qBS70y!m>luv+{;WB&SO|alqQXrBk7y+E>(xA`r}8Ap(cq$@GbrV>|FqG4h)+)t|%;n9FN{ccX}O{jd%P4~1uT^E&co zpHnGMZqj|)me)S%6yEqF=>9WOPjPw3VY35Q>{qkNzq~jQujj@gd z2R;nY)$sO~-P+SxKlC&ijwXGx$Z|cuJc0XkClTv`KiN0-%b#{r{iom8jO2NsXEMYZ zcj-94>zY%wiKr=^pB@63Bx@TK#@X-?;kgD6rC$5ylvE1IWv28%ZLez5e%$goTGS{z zX1Pc*_V(x+$BeU77R#C(Wv!$S%+ZO3TC=1+*?mHKmB~9OW6isN@`)e*{OO-gbO0B1T#Tnd^_$aBvTa!;f3H|%t~zEw1Z z9!g9m-_b;Ann)@k4k;`5W0D7Jh@tUW(Y)<_41hTkvL>?W1pTu^%mKpeiYpRMIlVl( zYH{hUCH{$UNx#SgS9Fgsq&hA(t4-Tr9qgG-Kno4=)PDA}-G6--V3Evx;%Q}wNSLQ% zf8YuD^8-7vn6Gm&PkrFKWL-#NmUfbI#dIU1zW4pYgfGK-!OgCPc?UaRx)sjpvv%>) z-a?Z@6~C+Cmga}8Wdz#5!(Kk_4Gs+g$JbkHZygXjKOl1V_IvuAy1donX`@|G!pBcc z$&q}nV{21$6L>8=A$Ib?ECTg*SF}l+&mc`?WiU+{i9Mvc; zGwu>exsFE2{0WI)90dGEAoC#_R}Jlu*^v=Ttt8ci&Ba(+K_@%S&ZEWE*YzRQ%MiAy z9|9F=WZ`StrK?Yarh>(IdXfo`oT~QdOt|!dJIkpy;h&~SW~MkU*z9dsof5CqH`@lJ zS5#SC-ey&KuL@dpsX{>`w#C77{kLimKW!_Lm)I#fK+3BNrLsfsB$uPOO-<*@B@{B5 zY|n_PPN8a>J+Hi3nkcCc(fN}MdXVZ*`<5%dYZdiv0Q=|6g7UAlB|rR-V)!ZwrCT{R zZ{psLY^#-N>QY9fdI@FxFdm5W<%MlmGc<&HJj159E*RgM4dQx8%6M9I^aTB9$jsBW z2VmW!htT}m|M|zk#liR?i3EyDX({@F^mSpO!t8_{bP~jen27gp;&E3jW_emoZaDe; za@qbfy1KawA3mJ{p9*a$6$>Bdze_`jyb(xmt(khgkUn_`r^;IQKd^NO_C!6=6KYU) z+VM_<`lex4_CzQ(k`6OrS@Ntil3_pix;ZMbSA~wT`vLr_gQN)!JQwe+>4(-acEM7dkn9)UgKWhITDmy5C?_qg7M< z%Wun%!ea;b2nSpzBe#|OARe~CFWP?HKf!@^ak%gvzS{olwu~`>t?#6Gc#7d>;Qm2j zsAeJ*WD9iEiOVGj0;haLUR{x7o|cUG+o8@a-!V?PIO|{gvA7mEZ!(EH)LOTBgfF$Jw0ebwXV8se?&o?yP zOzgxAns%T7zX^BJe32^1cip<6gbAfhB}A(qg`}BYU~N4+1WNwKH{E8e2iyAMr zQ?MZ(txYzLRL_1(KdjN$LzS9LsmO*aMciX1F3x?sX^^=SL-xNyPBZrnIPorQdEWpB z=1{?`xa!$Z$^@1`ypcJ6+5LJ)6;~F5(!;XO5gI99#GHj zASmxB%)97^QTh#nvLX^O7Af|Kuov3+P9RPqxAQ={nq0={5@I5J$OLHt%f5X;J6Jy@ zLFpreujr1n?^j4RtVEx|y&3PlYWRy*!V;>*YS=AJdz}AQtHpsF^3=fbIN`q$4JDQ6 z8r@AFn`M{3TkCfNuq=v-TiJ!3RI!DD=fMpxvrpWs%NC@aG0?=7Uw4cTR_b*V7=>?sA|-m?t!jw z-z+prOUX94B37yeyIb5YuhdVMmK#qoHt^M)Um*Xepg=PIo6y$??I6b>=KEF~R4>v@ z=Wbq)gsbaD%IvEg_cO4tZ=5hQ>tcxQ)R@Kx_*zn@?gx#}{=FY4I5@>BW`wB$`5_Fq zZJNIqQC=T~LE!{AiDtn3E?wgDDSEz zt?XZ+Bz`qoD^i3Lg;&6dsBPf-bHI9yHmEDYcF?U*D+a!;U_z=RWG#f%kU=(6KO(okrQ1h<2m|JW7s2K#Kkt=>%S9jh)ev?$OPw zn)>3$;KT&u|Jc9vBq-2eXUT@M~JanXhGojfpTy;dldO|sRO1z_{j(`*Np)tybe1ai01{f)$ zj3CzPw#a;(^0%pPS^)jpiaZd=5qSh_gi(l=AdwxXeq~xY_IAsL4fM68BBb#9>$?8{nHtF3&GHnL(ik|$d zf$n^WIMYAvM2Xu1casEHn3Nj_-a07oW%7J_#98&)Mj|)-r@+spU!FP#N&l7-pEJD( bM7-1iXj~y+RvBTD0RDM>>$B{dhcNm7j_)g2 literal 0 HcmV?d00001 diff --git a/Sample/Test/Baseline/RenderingSample-Triangle.png b/Sample/Test/Baseline/RenderingSample-Triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..ed7e2b12934a3dcad9bdcff7ac385882260d757e GIT binary patch literal 33022 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 +#include +#include +#include +#include + +#include + +#define STB_IMAGE_IMPLEMENTATION +#include + +namespace Sample::Test { + struct Params { + std::string samplePath; + std::string rhi; + std::string baselinePath; + std::string outputPath; + }; + + static bool ParseParams(const int argc, char* argv[], Params& outParams) + { + if (argc != 9) { + return false; + } + for (int i = 1; i + 1 < argc; i += 2) { + const std::string argument = argv[i]; + const std::string value = argv[i + 1]; + if (argument == "--sample") { + outParams.samplePath = value; + } else if (argument == "--rhi") { + outParams.rhi = value; + } else if (argument == "--baseline") { + outParams.baselinePath = value; + } else if (argument == "--output") { + outParams.outputPath = value; + } else { + return false; + } + } + return !outParams.samplePath.empty() && !outParams.rhi.empty() && !outParams.baselinePath.empty() && !outParams.outputPath.empty(); + } + + static std::string Quote(const std::string& value) + { + return '"' + value + '"'; + } + + static bool RunSample(const Params& params) + { + const std::filesystem::path outputPath(params.outputPath); + std::filesystem::create_directories(outputPath.parent_path()); + + std::string command = Quote(params.samplePath) + " -headless -rhi " + params.rhi + " -output " + Quote(params.outputPath); +#if CI + command += " -softwareGpu"; +#endif + std::cout << "Running: " << command << std::endl; + return std::system(command.c_str()) == 0; + } + + static cimg_library::CImg LoadImage(const std::string& path) + { + int width = 0; + int height = 0; + int sourceChannels = 0; + constexpr int channels = 4; + unsigned char* pixels = stbi_load(path.c_str(), &width, &height, &sourceChannels, channels); + if (pixels == nullptr) { + throw std::runtime_error("Failed to load image: " + path); + } + + cimg_library::CImg image(width, height, 1, channels); + cimg_forXYC(image, x, y, channel) { + image(x, y, 0, channel) = pixels[(y * width + x) * channels + channel]; + } + stbi_image_free(pixels); + return image; + } + + static bool CompareImages(const Params& params) + { + using Image = cimg_library::CImg; + const Image baseline = LoadImage(params.baselinePath); + const Image output = LoadImage(params.outputPath); + if (!baseline.is_sameXYZC(output)) { + std::cerr << "Image dimensions differ: baseline=" << baseline.width() << 'x' << baseline.height() << 'x' << baseline.spectrum() + << ", output=" << output.width() << 'x' << output.height() << 'x' << output.spectrum() << std::endl; + return false; + } + + constexpr double minimumPsnr = 40.0; + const double mse = baseline.MSE(output); + const double psnr = baseline.PSNR(output); + std::cout << "Image comparison: MSE=" << mse << ", PSNR=" << psnr << " dB" << std::endl; + if (psnr >= minimumPsnr) { + return true; + } + + const auto diffPath = std::filesystem::path(params.outputPath).replace_extension(".diff.bmp"); + cimg_library::CImg diff(baseline); + diff -= output; + diff.abs().normalize(0, 255).save_bmp(diffPath.string().c_str()); + std::cerr << "Image comparison failed: PSNR is below " << minimumPsnr << " dB; diff saved to " << diffPath << std::endl; + return false; + } +} + +int main(const int argc, char* argv[]) +{ + try { + Sample::Test::Params params; + if (!Sample::Test::ParseParams(argc, argv, params)) { + std::cerr << "Usage: RenderingSample.Test --sample --rhi --baseline --output " << std::endl; + return 1; + } + if (!Sample::Test::RunSample(params)) { + std::cerr << "Rendering sample failed" << std::endl; + return 1; + } + return Sample::Test::CompareImages(params) ? 0 : 1; + } catch (const std::exception& exception) { + std::cerr << exception.what() << std::endl; + return 1; + } +} diff --git a/ThirdParty/Registry.cmake b/ThirdParty/Registry.cmake index 36b9044c0..e3283a3a2 100644 --- a/ThirdParty/Registry.cmake +++ b/ThirdParty/Registry.cmake @@ -20,6 +20,7 @@ endif () find_package(glfw3 REQUIRED GLOBAL) find_package(imgui REQUIRED GLOBAL) find_package(stb REQUIRED GLOBAL) +find_package(cimg REQUIRED GLOBAL) find_package(cityhash REQUIRED GLOBAL) find_package(GTest REQUIRED GLOBAL) find_package(benchmark REQUIRED GLOBAL) diff --git a/conanfile.py b/conanfile.py index 07f996195..54317be48 100644 --- a/conanfile.py +++ b/conanfile.py @@ -9,6 +9,7 @@ class ExplosionConan(ConanFile): def requirements(self): self.requires("stb/cci.20230920") + self.requires("cimg/3.3.2") self.requires("cityhash/1.0.1") self.requires("gtest/1.17.0") self.requires("benchmark/1.9.5") From b49eabf8b3c6b1dd11083fafba2c1cd0aa41e03c Mon Sep 17 00:00:00 2001 From: FlyAntNotDown <461425614@qq.com> Date: Tue, 18 Aug 2026 17:20:06 +0800 Subject: [PATCH 16/24] test: organize rendering diagnostics by case --- .github/workflows/build.yml | 9 ++++++ Sample/CMakeLists.txt | 4 +-- .../baseline.png} | Bin .../baseline.png} | Bin .../baseline.png} | Bin Sample/Test/RenderingSampleTest.cpp | 29 +++++++++++------- 6 files changed, 29 insertions(+), 13 deletions(-) rename Sample/Test/Baseline/{RenderingSample-BaseTexture.png => RenderingSample-BaseTexture/baseline.png} (100%) rename Sample/Test/Baseline/{RenderingSample-SSAO.png => RenderingSample-SSAO/baseline.png} (100%) rename Sample/Test/Baseline/{RenderingSample-Triangle.png => RenderingSample-Triangle/baseline.png} (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa4eb7129..1cee0945a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -95,6 +95,15 @@ jobs: working-directory: ${{github.workspace}}/build run: ctest -C ${{env.BUILD_TYPE}} --extra-verbose + - name: Upload Rendering Test Artifacts + if: failure() + uses: actions/upload-artifact@v4 + with: + name: rendering-test-${{runner.os}}-${{runner.arch}} + path: ${{github.workspace}}/build/Test/Generated/RenderingSample + if-no-files-found: warn + retention-days: 14 + - name: Install run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --target install -j ${{env.MAKE_THREAD_NUM}} diff --git a/Sample/CMakeLists.txt b/Sample/CMakeLists.txt index 05c485bc8..62f5a15ed 100644 --- a/Sample/CMakeLists.txt +++ b/Sample/CMakeLists.txt @@ -108,8 +108,8 @@ if (BUILD_TEST AND BUILD_SAMPLE) COMMAND RenderingSample.Test --sample $ --rhi ${arg_RHI} - --baseline ${CMAKE_CURRENT_SOURCE_DIR}/Test/Baseline/${arg_BASELINE}.png - --output ${CMAKE_BINARY_DIR}/Test/Generated/RenderingSample/${arg_BASELINE}-${arg_RHI}.png + --baseline ${CMAKE_CURRENT_SOURCE_DIR}/Test/Baseline/${arg_BASELINE}/baseline.png + --output-dir ${CMAKE_BINARY_DIR}/Test/Generated/RenderingSample/${arg_SAMPLE}/${arg_RHI} ) set_tests_properties(${test_name} PROPERTIES WORKING_DIRECTORY $) endfunction() diff --git a/Sample/Test/Baseline/RenderingSample-BaseTexture.png b/Sample/Test/Baseline/RenderingSample-BaseTexture/baseline.png similarity index 100% rename from Sample/Test/Baseline/RenderingSample-BaseTexture.png rename to Sample/Test/Baseline/RenderingSample-BaseTexture/baseline.png diff --git a/Sample/Test/Baseline/RenderingSample-SSAO.png b/Sample/Test/Baseline/RenderingSample-SSAO/baseline.png similarity index 100% rename from Sample/Test/Baseline/RenderingSample-SSAO.png rename to Sample/Test/Baseline/RenderingSample-SSAO/baseline.png diff --git a/Sample/Test/Baseline/RenderingSample-Triangle.png b/Sample/Test/Baseline/RenderingSample-Triangle/baseline.png similarity index 100% rename from Sample/Test/Baseline/RenderingSample-Triangle.png rename to Sample/Test/Baseline/RenderingSample-Triangle/baseline.png diff --git a/Sample/Test/RenderingSampleTest.cpp b/Sample/Test/RenderingSampleTest.cpp index 3d442c6c6..a4a6ec265 100644 --- a/Sample/Test/RenderingSampleTest.cpp +++ b/Sample/Test/RenderingSampleTest.cpp @@ -14,7 +14,7 @@ namespace Sample::Test { std::string samplePath; std::string rhi; std::string baselinePath; - std::string outputPath; + std::string outputDirectory; }; static bool ParseParams(const int argc, char* argv[], Params& outParams) @@ -31,13 +31,13 @@ namespace Sample::Test { outParams.rhi = value; } else if (argument == "--baseline") { outParams.baselinePath = value; - } else if (argument == "--output") { - outParams.outputPath = value; + } else if (argument == "--output-dir") { + outParams.outputDirectory = value; } else { return false; } } - return !outParams.samplePath.empty() && !outParams.rhi.empty() && !outParams.baselinePath.empty() && !outParams.outputPath.empty(); + return !outParams.samplePath.empty() && !outParams.rhi.empty() && !outParams.baselinePath.empty() && !outParams.outputDirectory.empty(); } static std::string Quote(const std::string& value) @@ -47,10 +47,16 @@ namespace Sample::Test { static bool RunSample(const Params& params) { - const std::filesystem::path outputPath(params.outputPath); - std::filesystem::create_directories(outputPath.parent_path()); + const std::filesystem::path outputDirectory(params.outputDirectory); + const auto baselinePath = outputDirectory / "baseline.png"; + const auto actualPath = outputDirectory / "actual.png"; + const auto diffPath = outputDirectory / "diff.bmp"; + std::filesystem::create_directories(outputDirectory); + std::filesystem::remove(actualPath); + std::filesystem::remove(diffPath); + std::filesystem::copy_file(params.baselinePath, baselinePath, std::filesystem::copy_options::overwrite_existing); - std::string command = Quote(params.samplePath) + " -headless -rhi " + params.rhi + " -output " + Quote(params.outputPath); + std::string command = Quote(params.samplePath) + " -headless -rhi " + params.rhi + " -output " + Quote(actualPath.string()); #if CI command += " -softwareGpu"; #endif @@ -80,8 +86,9 @@ namespace Sample::Test { static bool CompareImages(const Params& params) { using Image = cimg_library::CImg; - const Image baseline = LoadImage(params.baselinePath); - const Image output = LoadImage(params.outputPath); + const auto outputDirectory = std::filesystem::path(params.outputDirectory); + const Image baseline = LoadImage((outputDirectory / "baseline.png").string()); + const Image output = LoadImage((outputDirectory / "actual.png").string()); if (!baseline.is_sameXYZC(output)) { std::cerr << "Image dimensions differ: baseline=" << baseline.width() << 'x' << baseline.height() << 'x' << baseline.spectrum() << ", output=" << output.width() << 'x' << output.height() << 'x' << output.spectrum() << std::endl; @@ -96,7 +103,7 @@ namespace Sample::Test { return true; } - const auto diffPath = std::filesystem::path(params.outputPath).replace_extension(".diff.bmp"); + const auto diffPath = outputDirectory / "diff.bmp"; cimg_library::CImg diff(baseline); diff -= output; diff.abs().normalize(0, 255).save_bmp(diffPath.string().c_str()); @@ -110,7 +117,7 @@ int main(const int argc, char* argv[]) try { Sample::Test::Params params; if (!Sample::Test::ParseParams(argc, argv, params)) { - std::cerr << "Usage: RenderingSample.Test --sample --rhi --baseline --output " << std::endl; + std::cerr << "Usage: RenderingSample.Test --sample --rhi --baseline --output-dir " << std::endl; return 1; } if (!Sample::Test::RunSample(params)) { From 3170e60fb1cedc740056d118271f68f92eadde51 Mon Sep 17 00:00:00 2001 From: FlyAndNotDown <461425614@qq.com> Date: Tue, 18 Aug 2026 19:06:22 +0800 Subject: [PATCH 17/24] fix: stabilize rendering sample tests --- Engine/Source/Common/Include/Common/Process.h | 13 ++ Engine/Source/Common/Src/Process.cpp | 114 ++++++++++++++++++ Sample/CMakeLists.txt | 2 +- Sample/Rendering-SSAO/SSAOApplication.cpp | 23 ++-- Sample/Rendering-SSAO/Shader/Composition.esl | 8 +- Sample/Rendering-SSAO/Shader/Gbuffer.esl | 3 +- Sample/Rendering-SSAO/Shader/SSAO.esl | 6 +- .../RenderingSample-SSAO/baseline.png | Bin 336443 -> 314394 bytes Sample/Test/RenderingSampleTest.cpp | 26 ++-- 9 files changed, 168 insertions(+), 27 deletions(-) create mode 100644 Engine/Source/Common/Include/Common/Process.h create mode 100644 Engine/Source/Common/Src/Process.cpp diff --git a/Engine/Source/Common/Include/Common/Process.h b/Engine/Source/Common/Include/Common/Process.h new file mode 100644 index 000000000..a77916f21 --- /dev/null +++ b/Engine/Source/Common/Include/Common/Process.h @@ -0,0 +1,13 @@ +#pragma once + +#include +#include +#include +#include + +namespace Common { + class Process { + public: + static std::optional Run(const std::string& inExecutablePath, const std::vector& inArguments); + }; +} diff --git a/Engine/Source/Common/Src/Process.cpp b/Engine/Source/Common/Src/Process.cpp new file mode 100644 index 000000000..791bd208c --- /dev/null +++ b/Engine/Source/Common/Src/Process.cpp @@ -0,0 +1,114 @@ +#include + +#if PLATFORM_WINDOWS +#include + +#include +#else +#include +#include +#include + +#if PLATFORM_MACOS +#include +#else +extern char** environ; +#endif +#endif + +namespace Common::Internal { +#if PLATFORM_WINDOWS + static void AppendWindowsCommandLineArgument(std::wstring& outCommandLine, const std::wstring& inArgument) + { + if (!outCommandLine.empty()) { + outCommandLine.push_back(L' '); + } + + outCommandLine.push_back(L'"'); + size_t backslashCount = 0; + for (const wchar_t character : inArgument) { + if (character == L'\\') { + ++backslashCount; + continue; + } + if (character == L'"') { + outCommandLine.append(backslashCount * 2 + 1, L'\\'); + } else { + outCommandLine.append(backslashCount, L'\\'); + } + backslashCount = 0; + outCommandLine.push_back(character); + } + outCommandLine.append(backslashCount * 2, L'\\'); + outCommandLine.push_back(L'"'); + } +#else + static char** GetEnvironment() + { +#if PLATFORM_MACOS + return *_NSGetEnviron(); +#else + return environ; +#endif + } + + static std::optional WaitForProcess(const pid_t processId) + { + int status = 0; + while (waitpid(processId, &status, 0) == -1) { + if (errno != EINTR) { + return std::nullopt; + } + } + if (WIFEXITED(status)) { + return WEXITSTATUS(status); + } + if (WIFSIGNALED(status)) { + return 128 + WTERMSIG(status); + } + return std::nullopt; + } +#endif +} + +namespace Common { + std::optional Process::Run(const std::string& inExecutablePath, const std::vector& inArguments) + { +#if PLATFORM_WINDOWS + const std::wstring executablePath = StringUtils::ToWideString(inExecutablePath); + std::wstring commandLine; + Internal::AppendWindowsCommandLineArgument(commandLine, executablePath); + for (const auto& argument : inArguments) { + Internal::AppendWindowsCommandLineArgument(commandLine, StringUtils::ToWideString(argument)); + } + + STARTUPINFOW startupInfo {}; + startupInfo.cb = sizeof(startupInfo); + PROCESS_INFORMATION processInfo {}; + if (!CreateProcessW(executablePath.c_str(), commandLine.data(), nullptr, nullptr, FALSE, 0, nullptr, nullptr, &startupInfo, &processInfo)) { + return std::nullopt; + } + + const DWORD waitResult = WaitForSingleObject(processInfo.hProcess, INFINITE); + DWORD exitCode = 0; + const bool hasExitCode = waitResult == WAIT_OBJECT_0 && GetExitCodeProcess(processInfo.hProcess, &exitCode); + CloseHandle(processInfo.hThread); + CloseHandle(processInfo.hProcess); + return hasExitCode ? std::optional(static_cast(exitCode)) : std::nullopt; +#else + std::vector arguments; + arguments.reserve(inArguments.size() + 2); + arguments.push_back(const_cast(inExecutablePath.c_str())); + for (const auto& argument : inArguments) { + arguments.push_back(const_cast(argument.c_str())); + } + arguments.push_back(nullptr); + + pid_t processId = 0; + if (posix_spawn(&processId, inExecutablePath.c_str(), nullptr, nullptr, arguments.data(), Internal::GetEnvironment()) != 0) { + return std::nullopt; + } + return Internal::WaitForProcess(processId); +#endif + } +} diff --git a/Sample/CMakeLists.txt b/Sample/CMakeLists.txt index 62f5a15ed..ef85b41e3 100644 --- a/Sample/CMakeLists.txt +++ b/Sample/CMakeLists.txt @@ -90,7 +90,7 @@ if (BUILD_TEST AND BUILD_SAMPLE) NAME RenderingSample.Test FOLDER Test SRC Test/RenderingSampleTest.cpp - LIB cimg::cimg stb::stb + LIB Common cimg::cimg stb::stb DEP_TARGET RenderingSample-Triangle RenderingSample-BaseTexture RenderingSample-SSAO PRIVATE_COMPILE_DEF cimg_display=0 CI=$ NOT_INSTALL diff --git a/Sample/Rendering-SSAO/SSAOApplication.cpp b/Sample/Rendering-SSAO/SSAOApplication.cpp index 82d00d6a9..dc542f74d 100644 --- a/Sample/Rendering-SSAO/SSAOApplication.cpp +++ b/Sample/Rendering-SSAO/SSAOApplication.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -496,6 +497,16 @@ class SSAOApp final : public Application { std::vector materials; // Helper methods + uint32_t GetRandomSeed() const + { + return IsHeadless() ? 0x5a17u : static_cast(std::time(nullptr)); + } + + static float GenerateRandomFloat(std::mt19937& randomEngine) + { + return static_cast(static_cast(randomEngine()) / (static_cast(std::mt19937::max()) + 1.0)); + } + void CompileAllShaders() const { ShaderCompileOptions options; @@ -737,8 +748,7 @@ class SSAOApp final : public Application { } // SSAO kernel - std::default_random_engine rndEngine(static_cast(time(nullptr))); - std::uniform_real_distribution rndDist(0.0f, 1.0f); + std::mt19937 randomEngine(GetRandomSeed()); std::vector ssaoKernel(ssaoKernelSize); auto lerp = [](float a, float b, float f) ->float { @@ -746,9 +756,9 @@ class SSAOApp final : public Application { }; for (uint32_t i = 0; i < ssaoKernelSize; ++i) { - FVec3 sample(rndDist(rndEngine) * 2.0 - 1.0, rndDist(rndEngine) * 2.0 - 1.0, rndDist(rndEngine)); + FVec3 sample(GenerateRandomFloat(randomEngine) * 2.0 - 1.0, GenerateRandomFloat(randomEngine) * 2.0 - 1.0, GenerateRandomFloat(randomEngine)); sample.Normalize(); - sample *= rndDist(rndEngine); + sample *= GenerateRandomFloat(randomEngine); float scale = static_cast(i) / static_cast(ssaoKernelSize); scale = lerp(0.1f, 1.0f, scale * scale); sample = sample * scale; @@ -771,12 +781,11 @@ class SSAOApp final : public Application { void GenerateNoiseTexture() { - std::default_random_engine rndEngine(static_cast(time(nullptr))); - std::uniform_real_distribution rndDist(0.0f, 1.0f); + std::mt19937 randomEngine(GetRandomSeed()); std::vector ssaoNoise(ssaoNoiseDim * ssaoNoiseDim); for (auto& randomVec : ssaoNoise) { - randomVec = FVec4(rndDist(rndEngine) * 2.0f - 1.0f, rndDist(rndEngine) * 2.0f - 1.0f, 0.0f, 0.0f); + randomVec = FVec4(GenerateRandomFloat(randomEngine) * 2.0f - 1.0f, GenerateRandomFloat(randomEngine) * 2.0f - 1.0f, 0.0f, 0.0f); } noiseTex = device->CreateTexture( diff --git a/Sample/Rendering-SSAO/Shader/Composition.esl b/Sample/Rendering-SSAO/Shader/Composition.esl index 3b093ffbe..7b704fac8 100644 --- a/Sample/Rendering-SSAO/Shader/Composition.esl +++ b/Sample/Rendering-SSAO/Shader/Composition.esl @@ -41,7 +41,7 @@ float4 PSMain(VSOutput input) : SV_TARGET float3 normal = normalize(normalTex.Sample(texSampler, input.uv).rgb * 2.0 - 1.0); float4 albedo = albedoTex.Sample(texSampler, input.uv); - float ssao = (ssaoBlur == 1) ? ssaoBluredTex.Sample(texSampler, input.uv).r : ssaoTex.Sample(texSampler, input.uv).r; + float ambientOcclusion = (ssaoBlur == 1) ? ssaoBluredTex.Sample(texSampler, input.uv).r : ssaoTex.Sample(texSampler, input.uv).r; float3 lightposition = float3(0.0, 0.0, 0.0); float3 L = normalize(lightposition - fragposition); @@ -49,12 +49,12 @@ float4 PSMain(VSOutput input) : SV_TARGET float4 outFragColor = float4(1.0f, 1.0f, 1.0f, 1.0f); if (ssaoOnly == 1) { - outFragColor.rgb = ssao.rrr; + outFragColor.rgb = ambientOcclusion.rrr; } else { float3 baseColor = albedo.rgb * NdotL; if (ssao == 1) { - outFragColor.rgb = ssao.rrr; + outFragColor.rgb = ambientOcclusion.rrr; if (ssaoOnly != 1) { outFragColor.rgb *= baseColor; @@ -64,4 +64,4 @@ float4 PSMain(VSOutput input) : SV_TARGET } } return outFragColor; -} \ No newline at end of file +} diff --git a/Sample/Rendering-SSAO/Shader/Gbuffer.esl b/Sample/Rendering-SSAO/Shader/Gbuffer.esl index e60e535c1..c9c0d8ef5 100644 --- a/Sample/Rendering-SSAO/Shader/Gbuffer.esl +++ b/Sample/Rendering-SSAO/Shader/Gbuffer.esl @@ -45,7 +45,6 @@ VSOutput VSMain(VSInput input) #if VULKAN output.position.y = -output.position.y; - output.normal.y = -output.normal.y; #endif output.color = input.color; @@ -72,4 +71,4 @@ FSOutput PSMain(VSOutput input) output.normal = float4(normalize(input.normal) * 0.5 + 0.5, 1.0); output.Albedo = colorTex.Sample(colorSampler, input.uv) * float4(input.color, 1.0); return output; -} \ No newline at end of file +} diff --git a/Sample/Rendering-SSAO/Shader/SSAO.esl b/Sample/Rendering-SSAO/Shader/SSAO.esl index 8fd4ab122..691676ce2 100644 --- a/Sample/Rendering-SSAO/Shader/SSAO.esl +++ b/Sample/Rendering-SSAO/Shader/SSAO.esl @@ -65,13 +65,13 @@ float PSMain(VSOutput input) : SV_TARGET float4 offset = float4(sampleposition, 1.0f); offset = mul(projection, offset); offset.xyz /= offset.w; - offset.xyz = offset.xyz * 0.5f + 0.2f; + offset.xy = offset.xy * float2(0.5f, -0.5f) + 0.5f; - float sampleDepth = -posDepthTex.Sample(texSampler, offset.xy).w; + float sampleDepth = posDepthTex.Sample(texSampler, offset.xy).z; float rangeCheck = smoothstep(0.0f, 1.0f, 0.5 / abs(fragposition.z - sampleDepth)); occlusion += (sampleDepth >= sampleposition.z ? 1.0f : 0.0f) * rangeCheck; } occlusion = 1.0 - (occlusion / 64.0); return occlusion; -} \ No newline at end of file +} diff --git a/Sample/Test/Baseline/RenderingSample-SSAO/baseline.png b/Sample/Test/Baseline/RenderingSample-SSAO/baseline.png index bc02217b8beecffe61166ad1d53aec6684ea76e6..c820c10cd5241f828a69aa554fe36e48f4dfd352 100644 GIT binary patch literal 314394 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

p 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