From 1c8b7a61b07a40f8d0657101e1ec467e7c6fca69 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 28 Sep 2024 22:56:26 +0300 Subject: [PATCH 01/20] Lua: Expose read/write functions for floats and doubles --- src/lua.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/lua.cpp b/src/lua.cpp index 6a16ab5b..5b78cec2 100644 --- a/src/lua.cpp +++ b/src/lua.cpp @@ -130,6 +130,32 @@ MAKE_MEMORY_FUNCTIONS(32) MAKE_MEMORY_FUNCTIONS(64) #undef MAKE_MEMORY_FUNCTIONS +static int readFloatThunk(lua_State* L) { + const u32 vaddr = (u32)lua_tonumber(L, 1); + lua_pushnumber(L, (lua_Number)Helpers::bit_cast(LuaManager::g_emulator->getMemory().read32(vaddr))); + return 1; +} + +static int writeFloatThunk(lua_State* L) { + const u32 vaddr = (u32)lua_tonumber(L, 1); + const float value = (float)lua_tonumber(L, 2); + LuaManager::g_emulator->getMemory().write32(vaddr, Helpers::bit_cast(value)); + return 0; +} + +static int readDoubleThunk(lua_State* L) { + const u32 vaddr = (u32)lua_tonumber(L, 1); + lua_pushnumber(L, (lua_Number)Helpers::bit_cast(LuaManager::g_emulator->getMemory().read64(vaddr))); + return 1; +} + +static int writeDoubleThunk(lua_State* L) { + const u32 vaddr = (u32)lua_tonumber(L, 1); + const double value = (double)lua_tonumber(L, 2); + LuaManager::g_emulator->getMemory().write64(vaddr, Helpers::bit_cast(value)); + return 0; +} + static int getAppIDThunk(lua_State* L) { std::optional id = LuaManager::g_emulator->getMemory().getProgramID(); @@ -248,10 +274,14 @@ static constexpr luaL_Reg functions[] = { { "__read16", read16Thunk }, { "__read32", read32Thunk }, { "__read64", read64Thunk }, + { "__readFloat", readFloatThunk }, + { "__readDouble", readDoubleThunk }, { "__write8", write8Thunk} , { "__write16", write16Thunk }, { "__write32", write32Thunk }, { "__write64", write64Thunk }, + { "__writeFloat", writeFloatThunk }, + { "__writeDouble", writeDoubleThunk }, { "__getAppID", getAppIDThunk }, { "__pause", pauseThunk }, { "__resume", resumeThunk }, @@ -273,10 +303,15 @@ void LuaManager::initializeThunks() { read16 = function(addr) return GLOBALS.__read16(addr) end, read32 = function(addr) return GLOBALS.__read32(addr) end, read64 = function(addr) return GLOBALS.__read64(addr) end, + readFloat = function(addr) return GLOBALS.__readFloat(addr) end, + readDouble = function(addr) return GLOBALS.__readDouble(addr) end, + write8 = function(addr, value) GLOBALS.__write8(addr, value) end, write16 = function(addr, value) GLOBALS.__write16(addr, value) end, write32 = function(addr, value) GLOBALS.__write32(addr, value) end, write64 = function(addr, value) GLOBALS.__write64(addr, value) end, + writeFloat = function(addr, value) GLOBALS.__writeFloat(addr, value) end, + writeDouble = function(addr, value) GLOBALS.__writeDouble(addr, value) end, getAppID = function() local ffi = require("ffi") From 3e72323653cdfd31b0d1428f919847b5d20077fc Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 29 Sep 2024 00:32:51 +0300 Subject: [PATCH 02/20] HLE DSP: Initial mixer work --- include/audio/dsp_shared_mem.hpp | 8 +++--- include/audio/hle_core.hpp | 46 +++++++++++++++++++++++++++++-- src/core/audio/hle_core.cpp | 47 ++++++++++++++++++++++++++++++++ 3 files changed, 94 insertions(+), 7 deletions(-) diff --git a/include/audio/dsp_shared_mem.hpp b/include/audio/dsp_shared_mem.hpp index e776211d..272edf7e 100644 --- a/include/audio/dsp_shared_mem.hpp +++ b/include/audio/dsp_shared_mem.hpp @@ -324,8 +324,8 @@ namespace Audio::HLE { BitField<15, 1, u32> outputBufferCountDirty; BitField<16, 1, u32> masterVolumeDirty; - BitField<24, 1, u32> auxReturnVolume0Dirty; - BitField<25, 1, u32> auxReturnVolume1Dirty; + BitField<24, 1, u32> auxVolume0Dirty; + BitField<25, 1, u32> auxVolume1Dirty; BitField<26, 1, u32> outputFormatDirty; BitField<27, 1, u32> clippingModeDirty; BitField<28, 1, u32> headphonesConnectedDirty; @@ -337,7 +337,7 @@ namespace Audio::HLE { /// The DSP has three intermediate audio mixers. This controls the volume level (0.0-1.0) for /// each at the final mixer. float_le masterVolume; - std::array auxReturnVolume; + std::array auxVolumes; u16_le outputBufferCount; u16 pad1[2]; @@ -422,7 +422,7 @@ namespace Audio::HLE { struct DspStatus { u16_le unknown; - u16_le dropped_frames; + u16_le droppedFrames; u16 pad0[0xE]; }; ASSERT_DSP_STRUCT(DspStatus, 32); diff --git a/include/audio/hle_core.hpp b/include/audio/hle_core.hpp index c36f0500..bd717237 100644 --- a/include/audio/hle_core.hpp +++ b/include/audio/hle_core.hpp @@ -95,8 +95,7 @@ namespace Audio { DSPSource() { reset(); } }; - class HLE_DSP : public DSPCore { - // The audio frame types are public in case we want to use them for unit tests + class DSPMixer { public: template using Sample = std::array; @@ -113,6 +112,43 @@ namespace Audio { template using QuadFrame = Frame; + private: + using ChannelFormat = HLE::DspConfiguration::OutputFormat; + // The audio from each DSP voice is converted to quadraphonic and then fed into 3 intermediate mixing stages + // Two of these intermediate mixers (second and third) are used for effects, including custom effects done on the CPU + static constexpr usize mixerStageCount = 3; + + public: + ChannelFormat channelFormat = ChannelFormat::Stereo; + std::array volumes; + std::array enableAuxStages; + + void reset() { + channelFormat = ChannelFormat::Stereo; + + volumes.fill(0.0); + enableAuxStages.fill(false); + } + }; + + class HLE_DSP : public DSPCore { + // The audio frame types are public in case we want to use them for unit tests + public: + template + using Sample = DSPMixer::Sample; + + template + using Frame = DSPMixer::Frame; + + template + using MonoFrame = DSPMixer::MonoFrame; + + template + using StereoFrame = DSPMixer::StereoFrame; + + template + using QuadFrame = DSPMixer::QuadFrame; + using Source = Audio::DSPSource; using SampleBuffer = Source::SampleBuffer; @@ -131,6 +167,7 @@ namespace Audio { std::array sources; // DSP voices Audio::HLE::DspMemory dspRam; + Audio::DSPMixer mixer; std::unique_ptr aacDecoder; void resetAudioPipe(); @@ -175,10 +212,13 @@ namespace Audio { void handleAACRequest(const AAC::Message& request); void updateSourceConfig(Source& source, HLE::SourceConfiguration::Configuration& config, s16_le* adpcmCoefficients); + void updateMixerConfig(HLE::SharedMemory& sharedMem); void generateFrame(StereoFrame& frame); void generateFrame(DSPSource& source); void outputFrame(); - + // Perform the final mix, mixing the quadraphonic samples from all voices into the output audio frame + void performMix(Audio::HLE::SharedMemory& readRegion, Audio::HLE::SharedMemory& writeRegion); + // Decode an entire buffer worth of audio void decodeBuffer(DSPSource& source); diff --git a/src/core/audio/hle_core.cpp b/src/core/audio/hle_core.cpp index b4f9ab02..a616f317 100644 --- a/src/core/audio/hle_core.cpp +++ b/src/core/audio/hle_core.cpp @@ -76,6 +76,7 @@ namespace Audio { source.reset(); } + mixer.reset(); // Note: Reset audio pipe AFTER resetting all pipes, otherwise the new data will be yeeted resetAudioPipe(); } @@ -250,6 +251,8 @@ namespace Audio { source.isBufferIDDirty = false; } + + performMix(read, write); } void HLE_DSP::updateSourceConfig(Source& source, HLE::SourceConfiguration::Configuration& config, s16_le* adpcmCoefficients) { @@ -465,6 +468,50 @@ namespace Audio { } } + void HLE_DSP::performMix(Audio::HLE::SharedMemory& readRegion, Audio::HLE::SharedMemory& writeRegion) { + updateMixerConfig(readRegion); + // TODO: Do the actual audio mixing + + auto& dspStatus = writeRegion.dspStatus; + // Stub the DSP status. It's unknown what the "unknown" field is but Citra sets it to 0, so we do too to be safe + dspStatus.droppedFrames = 0; + dspStatus.unknown = 0; + } + + void HLE_DSP::updateMixerConfig(Audio::HLE::SharedMemory& sharedMem) { + auto& config = sharedMem.dspConfiguration; + // No configs have been changed, so there's nothing to update + if (config.dirtyRaw == 0) { + return; + } + + if (config.outputFormatDirty) { + mixer.channelFormat = config.outputFormat; + } + + if (config.masterVolumeDirty) { + mixer.volumes[0] = config.masterVolume; + } + + if (config.auxVolume0Dirty) { + mixer.volumes[1] = config.auxVolumes[0]; + } + + if (config.auxVolume1Dirty) { + mixer.volumes[2] = config.auxVolumes[1]; + } + + if (config.auxBusEnable0Dirty) { + mixer.enableAuxStages[0] = config.auxBusEnable[0] != 0; + } + + if (config.auxBusEnable1Dirty) { + mixer.enableAuxStages[1] = config.auxBusEnable[1] != 0; + } + + config.dirtyRaw = 0; + } + HLE_DSP::SampleBuffer HLE_DSP::decodePCM8(const u8* data, usize sampleCount, Source& source) { SampleBuffer decodedSamples(sampleCount); From 82068031f3fb2a5b010a77c9029558be2f275d9f Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 13 Oct 2024 23:27:08 +0300 Subject: [PATCH 03/20] Shadergen: Pre-allocate space for shadergen string --- src/core/PICA/shader_gen_glsl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp index 69f74930..61694fcc 100644 --- a/src/core/PICA/shader_gen_glsl.cpp +++ b/src/core/PICA/shader_gen_glsl.cpp @@ -34,6 +34,8 @@ static constexpr const char* uniformDefinition = R"( std::string FragmentGenerator::getDefaultVertexShader() { std::string ret = ""; + // Reserve some space (128KB) in the output string to avoid too many allocations later + ret.reserve(128 * 1024); switch (api) { case API::GL: ret += "#version 410 core"; break; From fa9ce5fc70c71905a68a536610de01c8763836f4 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 13 Oct 2024 21:17:24 +0000 Subject: [PATCH 04/20] GLES: Implement logic ops via fb fetch (#608) * GLES: Implement logic ops via fb fetch * Attempt to fix deprecated libglx-mesa0 package * Update Qt_Build.yml * GLES: Enable fb fetch instead of requiring it * GLES: Add support for GL_ARM_shader_framebuffer_fetch * Fix GL_EXT_shader_framebuffer_fetch behavior --- .github/workflows/Hydra_Build.yml | 4 +- .github/workflows/Linux_AppImage_Build.yml | 2 +- .github/workflows/Linux_Build.yml | 2 +- .github/workflows/Qt_Build.yml | 3 +- CMakeLists.txt | 2 +- include/PICA/pica_frag_config.hpp | 5 ++ include/PICA/regs.hpp | 19 +++++++ include/PICA/shader_gen.hpp | 3 +- include/renderer_gl/gl_driver.hpp | 12 +++++ include/renderer_gl/renderer_gl.hpp | 2 + src/core/PICA/shader_gen_glsl.cpp | 59 ++++++++++++++++++++-- src/core/renderer_gl/renderer_gl.cpp | 10 +++- 12 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 include/renderer_gl/gl_driver.hpp diff --git a/.github/workflows/Hydra_Build.yml b/.github/workflows/Hydra_Build.yml index e2c2004b..ce48966c 100644 --- a/.github/workflows/Hydra_Build.yml +++ b/.github/workflows/Hydra_Build.yml @@ -107,7 +107,7 @@ jobs: - name: Install misc packages run: | - sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 libwayland-dev + sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev - name: Install newer Clang run: | @@ -160,7 +160,7 @@ jobs: - name: Install misc packages run: | - sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 libwayland-dev + sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev - name: Setup Vulkan SDK uses: humbletim/setup-vulkan-sdk@v1.2.0 diff --git a/.github/workflows/Linux_AppImage_Build.yml b/.github/workflows/Linux_AppImage_Build.yml index f32a7d38..1e3ec061 100644 --- a/.github/workflows/Linux_AppImage_Build.yml +++ b/.github/workflows/Linux_AppImage_Build.yml @@ -24,7 +24,7 @@ jobs: run: git submodule update --init --recursive - name: Install misc packages - run: sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 + run: sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 - name: Install newer Clang run: | diff --git a/.github/workflows/Linux_Build.yml b/.github/workflows/Linux_Build.yml index 9cb05303..05f1fa54 100644 --- a/.github/workflows/Linux_Build.yml +++ b/.github/workflows/Linux_Build.yml @@ -24,7 +24,7 @@ jobs: run: git submodule update --init --recursive - name: Install misc packages - run: sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev + run: sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev - name: Install newer Clang run: | diff --git a/.github/workflows/Qt_Build.yml b/.github/workflows/Qt_Build.yml index d3a09866..8a93a156 100644 --- a/.github/workflows/Qt_Build.yml +++ b/.github/workflows/Qt_Build.yml @@ -105,8 +105,7 @@ jobs: - name: Install misc packages run: | - sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 libwayland-dev libgl1-mesa-dev - sudo add-apt-repository -y ppa:savoury1/qt-6-2 + sudo apt-get update && sudo apt install libx11-dev libgl1 libglx-mesa0 mesa-common-dev libfuse2 libwayland-dev libgl1-mesa-dev sudo apt update sudo apt install qt6-base-dev qt6-base-private-dev diff --git a/CMakeLists.txt b/CMakeLists.txt index 88a92f8a..91dafe9e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -381,7 +381,7 @@ if(ENABLE_OPENGL) set(RENDERER_GL_INCLUDE_FILES third_party/opengl/opengl.hpp include/renderer_gl/renderer_gl.hpp include/renderer_gl/textures.hpp include/renderer_gl/surfaces.hpp include/renderer_gl/surface_cache.hpp - include/renderer_gl/gl_state.hpp + include/renderer_gl/gl_state.hpp include/renderer_gl/gl_driver.hpp ) set(RENDERER_GL_SOURCE_FILES src/core/renderer_gl/renderer_gl.cpp diff --git a/include/PICA/pica_frag_config.hpp b/include/PICA/pica_frag_config.hpp index 5d5f8420..7b63a7b5 100644 --- a/include/PICA/pica_frag_config.hpp +++ b/include/PICA/pica_frag_config.hpp @@ -17,6 +17,7 @@ namespace PICA { // enable == off means a CompareFunction of Always BitField<0, 3, CompareFunction> alphaTestFunction; BitField<3, 1, u32> depthMapEnable; + BitField<4, 4, LogicOpMode> logicOpMode; }; }; @@ -214,6 +215,10 @@ namespace PICA { (alphaTestConfig & 1) ? static_cast(alphaTestFunction) : PICA::CompareFunction::Always; outConfig.depthMapEnable = regs[InternalRegs::DepthmapEnable] & 1; + // Shows if blending is enabled. If it is not enabled, then logic ops are enabled instead + const bool blendingEnabled = (regs[InternalRegs::ColourOperation] & (1 << 8)) != 0; + outConfig.logicOpMode = blendingEnabled ? LogicOpMode::Copy : LogicOpMode(Helpers::getBits<0, 4>(regs[InternalRegs::LogicOp])); + texConfig.texUnitConfig = regs[InternalRegs::TexUnitCfg]; texConfig.texEnvUpdateBuffer = regs[InternalRegs::TexEnvUpdateBuffer]; diff --git a/include/PICA/regs.hpp b/include/PICA/regs.hpp index 636e8f7c..3185d350 100644 --- a/include/PICA/regs.hpp +++ b/include/PICA/regs.hpp @@ -396,6 +396,25 @@ namespace PICA { GreaterOrEqual = 7, }; + enum class LogicOpMode : u32 { + Clear = 0, + And = 1, + ReverseAnd = 2, + Copy = 3, + Set = 4, + InvertedCopy = 5, + Nop = 6, + Invert = 7, + Nand = 8, + Or = 9, + Nor = 10, + Xor = 11, + Equiv = 12, + InvertedAnd = 13, + ReverseOr = 14, + InvertedOr = 15, + }; + enum class FogMode : u32 { Disabled = 0, Fog = 5, diff --git a/include/PICA/shader_gen.hpp b/include/PICA/shader_gen.hpp index 215e5adb..f938b558 100644 --- a/include/PICA/shader_gen.hpp +++ b/include/PICA/shader_gen.hpp @@ -25,10 +25,11 @@ namespace PICA::ShaderGen { bool isSamplerEnabled(u32 environmentID, u32 lutID); void compileFog(std::string& shader, const PICA::FragmentConfig& config); + void compileLogicOps(std::string& shader, const PICA::FragmentConfig& config); public: FragmentGenerator(API api, Language language) : api(api), language(language) {} - std::string generate(const PICA::FragmentConfig& config); + std::string generate(const PICA::FragmentConfig& config, void* driverInfo = nullptr); std::string getDefaultVertexShader(); void setTarget(API api, Language language) { diff --git a/include/renderer_gl/gl_driver.hpp b/include/renderer_gl/gl_driver.hpp new file mode 100644 index 00000000..a15c061f --- /dev/null +++ b/include/renderer_gl/gl_driver.hpp @@ -0,0 +1,12 @@ +#pragma once + +// Information about our OpenGL/OpenGL ES driver that we should keep track of +// Stuff like whether specific extensions are supported, and potentially things like OpenGL context information +namespace OpenGL { + struct Driver { + bool supportsExtFbFetch = false; + bool supportsArmFbFetch = false; + + bool supportFbFetch() const { return supportsExtFbFetch || supportsArmFbFetch; } + }; +} // namespace OpenGL \ No newline at end of file diff --git a/include/renderer_gl/renderer_gl.hpp b/include/renderer_gl/renderer_gl.hpp index 42b8bba1..07069536 100644 --- a/include/renderer_gl/renderer_gl.hpp +++ b/include/renderer_gl/renderer_gl.hpp @@ -12,6 +12,7 @@ #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" #include "PICA/shader_gen.hpp" +#include "gl_driver.hpp" #include "gl_state.hpp" #include "helpers.hpp" #include "logger.hpp" @@ -82,6 +83,7 @@ class RendererGL final : public Renderer { OpenGL::Program& getSpecializedShader(); PICA::ShaderGen::FragmentGenerator fragShaderGen; + OpenGL::Driver driverInfo; MAKE_LOG_FUNCTION(log, rendererLogger) void setupBlending(); diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp index 61694fcc..e1bdf517 100644 --- a/src/core/PICA/shader_gen_glsl.cpp +++ b/src/core/PICA/shader_gen_glsl.cpp @@ -1,6 +1,10 @@ #include "PICA/pica_frag_config.hpp" #include "PICA/regs.hpp" #include "PICA/shader_gen.hpp" + +// We can include the driver headers here since they shouldn't have any actual API-specific code +#include "renderer_gl/gl_driver.hpp" + using namespace PICA; using namespace PICA::ShaderGen; @@ -96,7 +100,7 @@ std::string FragmentGenerator::getDefaultVertexShader() { return ret; } -std::string FragmentGenerator::generate(const FragmentConfig& config) { +std::string FragmentGenerator::generate(const FragmentConfig& config, void* driverInfo) { std::string ret = ""; switch (api) { @@ -105,6 +109,27 @@ std::string FragmentGenerator::generate(const FragmentConfig& config) { default: break; } + // For GLES we need to enable & use the framebuffer fetch extension in order to emulate logic ops + bool emitLogicOps = api == API::GLES && config.outConfig.logicOpMode != PICA::LogicOpMode::Copy && driverInfo != nullptr; + + if (emitLogicOps) { + auto driver = static_cast(driverInfo); + + // If the driver does not support framebuffer fetch at all, don't emit logic op code + if (!driver->supportFbFetch()) { + emitLogicOps = false; + } + + // Figure out which fb fetch extension we have and enable it + else { + if (driver->supportsExtFbFetch) { + ret += "\n#extension GL_EXT_shader_framebuffer_fetch : enable\n#define fb_color fragColor\n"; + } else if (driver->supportsArmFbFetch) { + ret += "\n#extension GL_ARM_shader_framebuffer_fetch : enable\n#define fb_color gl_LastFragColorARM[0]\n"; + } + } + } + bool unimplementedFlag = false; if (api == API::GLES) { ret += R"( @@ -194,10 +219,13 @@ std::string FragmentGenerator::generate(const FragmentConfig& config) { } compileFog(ret, config); - applyAlphaTest(ret, config); - ret += "fragColor = combinerOutput;\n}"; // End of main function + if (!emitLogicOps) { + ret += "fragColor = combinerOutput;\n}"; // End of main function + } else { + compileLogicOps(ret, config); + } return ret; } @@ -673,3 +701,28 @@ void FragmentGenerator::compileFog(std::string& shader, const PICA::FragmentConf shader += "float fog_factor = clamp(value.r + value.g * delta, 0.0, 1.0);"; shader += "combinerOutput.rgb = mix(fog_color, combinerOutput.rgb, fog_factor);"; } + +void FragmentGenerator::compileLogicOps(std::string& shader, const PICA::FragmentConfig& config) { + if (api != API::GLES) [[unlikely]] { + Helpers::warn("Shadergen: Unsupported API for compileLogicOps"); + shader += "fragColor = combinerOutput;\n}"; // End of main function + + return; + } + + shader += "fragColor = "; + switch (config.outConfig.logicOpMode) { + case PICA::LogicOpMode::Copy: shader += "combinerOutput"; break; + case PICA::LogicOpMode::Nop: shader += "fb_color"; break; + case PICA::LogicOpMode::Clear: shader += "vec4(0.0)"; break; + case PICA::LogicOpMode::Set: shader += "vec4(uintBitsToFloat(0xFFFFFFFFu))"; break; + case PICA::LogicOpMode::InvertedCopy: shader += "vec4(uvec4(combinerOutput * 255.0) ^ uvec4(0xFFu)) * (1.0 / 255.0)"; break; + + default: + shader += "combinerOutput"; + Helpers::warn("Shadergen: Unimplemented logic op mode"); + break; + } + + shader += ";\n}"; // End of main function +} \ No newline at end of file diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index 5146370a..ecbee3a2 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -167,6 +167,10 @@ void RendererGL::initGraphicsContextInternal() { reset(); + // Populate our driver info structure + driverInfo.supportsExtFbFetch = GLAD_GL_EXT_shader_framebuffer_fetch != 0; + driverInfo.supportsArmFbFetch = GLAD_GL_ARM_shader_framebuffer_fetch != 0; + // Initialize the default vertex shader used with shadergen std::string defaultShadergenVSSource = fragShaderGen.getDefaultVertexShader(); defaultShadergenVs.create({defaultShadergenVSSource.c_str(), defaultShadergenVSSource.size()}, OpenGL::Vertex); @@ -839,12 +843,16 @@ OpenGL::Program& RendererGL::getSpecializedShader() { constexpr uint uboBlockBinding = 2; PICA::FragmentConfig fsConfig(regs); + // If we're not on GLES, ignore the logic op configuration and don't generate redundant shaders for it, since we use hw logic ops +#ifndef USING_GLES + fsConfig.outConfig.logicOpMode = PICA::LogicOpMode(0); +#endif CachedProgram& programEntry = shaderCache[fsConfig]; OpenGL::Program& program = programEntry.program; if (!program.exists()) { - std::string fs = fragShaderGen.generate(fsConfig); + std::string fs = fragShaderGen.generate(fsConfig, &driverInfo); OpenGL::Shader fragShader({fs.c_str(), fs.size()}, OpenGL::Fragment); program.create({defaultShadergenVs, fragShader}); From afaf18f1248f7ffbb7bb36c1ef86ce150ecd1a00 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 14 Oct 2024 00:42:35 +0300 Subject: [PATCH 05/20] GLES: Fix Set logic op --- src/core/PICA/shader_gen_glsl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp index e1bdf517..13d5aa58 100644 --- a/src/core/PICA/shader_gen_glsl.cpp +++ b/src/core/PICA/shader_gen_glsl.cpp @@ -715,7 +715,7 @@ void FragmentGenerator::compileLogicOps(std::string& shader, const PICA::Fragmen case PICA::LogicOpMode::Copy: shader += "combinerOutput"; break; case PICA::LogicOpMode::Nop: shader += "fb_color"; break; case PICA::LogicOpMode::Clear: shader += "vec4(0.0)"; break; - case PICA::LogicOpMode::Set: shader += "vec4(uintBitsToFloat(0xFFFFFFFFu))"; break; + case PICA::LogicOpMode::Set: shader += "vec4(1.0)"; break; case PICA::LogicOpMode::InvertedCopy: shader += "vec4(uvec4(combinerOutput * 255.0) ^ uvec4(0xFFu)) * (1.0 / 255.0)"; break; default: @@ -725,4 +725,4 @@ void FragmentGenerator::compileLogicOps(std::string& shader, const PICA::Fragmen } shader += ";\n}"; // End of main function -} \ No newline at end of file +} From 49a94a13c53b317157544b329eadf65667b004a9 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 19 Oct 2024 16:53:51 +0300 Subject: [PATCH 06/20] Moar shader decompiler (#559) * Renderer: Add prepareForDraw callback * Add fmt submodule and port shader decompiler instructions to it * Add shader acceleration setting * Hook up vertex shaders to shader cache * Shader decompiler: Fix redundant compilations * Shader Decompiler: Fix vertex attribute upload * Shader compiler: Simplify generated code for reading and faster compilation * Further simplify shader decompiler output * Shader decompiler: More smallen-ing * Shader decompiler: Get PICA uniforms uploaded to the GPU * Shader decompiler: Readd clipping * Shader decompiler: Actually `break` on control flow instructions * Shader decompiler: More control flow handling * Shader decompiler: Fix desitnation mask * Shader Decomp: Remove pair member capture in lambda (unsupported on NDK) * Disgusting changes to handle the fact that hw shader shaders are 2x as big * Shader decompiler: Implement proper output semantic mapping * Moar instructions * Shader decompiler: Add FLR/SLT/SLTI/SGE/SGEI * Shader decompiler: Add register indexing * Shader decompiler: Optimize mova with both x and y masked * Shader decompiler: Add DPH/DPHI * Fix shader caching being broken * PICA decompiler: Cache VS uniforms * Simply vertex cache code * Simplify vertex cache code * Shader decompiler: Add loops * Shader decompiler: Implement safe multiplication * Shader decompiler: Implement LG2/EX2 * Shader decompiler: More control flow * Shader decompiler: Fix JMPU condition * Shader decompiler: Convert main function to void * PICA: Start implementing GPU vertex fetch * More hw VAO work * More hw VAO work * More GPU vertex fetch code * Add GL Stream Buffer from Duckstation * GL: Actually upload data to stream buffers * GPU: Cleanup immediate mode handling * Get first renders working with accelerated draws * Shader decompiler: Fix control flow analysis bugs * HW shaders: Accelerate indexed draws * Shader decompiler: Add support for compilation errors * GLSL decompiler: Fall back for LITP * Add Renderdoc scope classes * Fix control flow analysis bug * HW shaders: Fix attribute fetch * Rewriting hw vertex fetch * Stream buffer: Fix copy-paste mistake * HW shaders: Fix indexed rendering * HW shaders: Add padding attributes * HW shaders: Avoid redundant glVertexAttrib4f calls * HW shaders: Fix loops * HW shaders: Make generated shaders slightly smaller * Fix libretro build * HW shaders: Fix android * Remove redundant ubershader checks * Set accelerate shader default to true * Shader decompiler: Don't declare VS input attributes as an array * Change ubuntu-latest to Ubuntu 24.04 because Microsoft screwed up their CI again * fix merge conflict bug --- .github/workflows/Android_Build.yml | 4 +- .github/workflows/HTTP_Build.yml | 2 +- .github/workflows/Hydra_Build.yml | 4 +- .github/workflows/Linux_AppImage_Build.yml | 2 +- .github/workflows/Linux_Build.yml | 2 +- .github/workflows/Qt_Build.yml | 2 +- .gitmodules | 3 + CMakeLists.txt | 12 +- include/PICA/draw_acceleration.hpp | 45 ++ include/PICA/gpu.hpp | 10 +- include/PICA/pica_vert_config.hpp | 57 ++ include/PICA/shader.hpp | 25 +- include/PICA/shader_decompiler.hpp | 19 +- include/PICA/shader_gen.hpp | 3 + include/PICA/shader_unit.hpp | 7 +- include/align.hpp | 99 +++ include/config.hpp | 6 +- include/renderdoc.hpp | 33 +- include/renderer.hpp | 13 +- include/renderer_gl/gl_state.hpp | 9 - include/renderer_gl/renderer_gl.hpp | 73 ++- src/config.cpp | 2 + src/core/PICA/draw_acceleration.cpp | 148 +++++ src/core/PICA/gpu.cpp | 79 ++- src/core/PICA/regs.cpp | 3 +- src/core/PICA/shader_decompiler.cpp | 624 ++++++++++++++++--- src/core/PICA/shader_gen_glsl.cpp | 111 ++++ src/core/PICA/shader_unit.cpp | 1 + src/core/renderer_gl/gl_state.cpp | 3 - src/core/renderer_gl/renderer_gl.cpp | 380 ++++++++--- src/libretro_core.cpp | 7 +- third_party/duckstation/gl/stream_buffer.cpp | 288 +++++++++ third_party/duckstation/gl/stream_buffer.h | 53 ++ third_party/fmt | 1 + 34 files changed, 1877 insertions(+), 253 deletions(-) create mode 100644 include/PICA/draw_acceleration.hpp create mode 100644 include/PICA/pica_vert_config.hpp create mode 100644 include/align.hpp create mode 100644 src/core/PICA/draw_acceleration.cpp create mode 100644 third_party/duckstation/gl/stream_buffer.cpp create mode 100644 third_party/duckstation/gl/stream_buffer.h create mode 160000 third_party/fmt diff --git a/.github/workflows/Android_Build.yml b/.github/workflows/Android_Build.yml index 11811f8b..b7e64f5f 100644 --- a/.github/workflows/Android_Build.yml +++ b/.github/workflows/Android_Build.yml @@ -8,7 +8,7 @@ on: jobs: x64: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 strategy: matrix: @@ -73,7 +73,7 @@ jobs: ./src/pandroid/app/build/outputs/apk/${{ env.BUILD_TYPE }}/app-${{ env.BUILD_TYPE }}.apk arm64: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 strategy: matrix: diff --git a/.github/workflows/HTTP_Build.yml b/.github/workflows/HTTP_Build.yml index 0bdaa4f7..c4f7cfee 100644 --- a/.github/workflows/HTTP_Build.yml +++ b/.github/workflows/HTTP_Build.yml @@ -16,7 +16,7 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/Hydra_Build.yml b/.github/workflows/Hydra_Build.yml index ce48966c..785e0e4a 100644 --- a/.github/workflows/Hydra_Build.yml +++ b/.github/workflows/Hydra_Build.yml @@ -98,7 +98,7 @@ jobs: ${{github.workspace}}/docs/libretro/panda3ds_libretro.info Linux: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 @@ -151,7 +151,7 @@ jobs: ${{github.workspace}}/docs/libretro/panda3ds_libretro.info Android-x64: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/Linux_AppImage_Build.yml b/.github/workflows/Linux_AppImage_Build.yml index 1e3ec061..51c4a933 100644 --- a/.github/workflows/Linux_AppImage_Build.yml +++ b/.github/workflows/Linux_AppImage_Build.yml @@ -16,7 +16,7 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/Linux_Build.yml b/.github/workflows/Linux_Build.yml index 05f1fa54..dfcb6954 100644 --- a/.github/workflows/Linux_Build.yml +++ b/.github/workflows/Linux_Build.yml @@ -16,7 +16,7 @@ jobs: # well on Windows or Mac. You can convert this to a matrix build if you need # cross-platform coverage. # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/Qt_Build.yml b/.github/workflows/Qt_Build.yml index 8a93a156..3b846a27 100644 --- a/.github/workflows/Qt_Build.yml +++ b/.github/workflows/Qt_Build.yml @@ -96,7 +96,7 @@ jobs: path: 'Alber.zip' Linux: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 diff --git a/.gitmodules b/.gitmodules index 97bc129c..f1a70f41 100644 --- a/.gitmodules +++ b/.gitmodules @@ -76,6 +76,9 @@ [submodule "third_party/metal-cpp"] path = third_party/metal-cpp url = https://github.com/Panda3DS-emu/metal-cpp +[submodule "third_party/fmt"] + path = third_party/fmt + url = https://github.com/fmtlib/fmt [submodule "third_party/fdk-aac"] path = third_party/fdk-aac url = https://github.com/Panda3DS-emu/fdk-aac/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 91dafe9e..fe72f3b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -146,11 +146,13 @@ if (NOT ANDROID) target_link_libraries(AlberCore PUBLIC SDL2-static) endif() +add_subdirectory(third_party/fmt) add_subdirectory(third_party/toml11) include_directories(${SDL2_INCLUDE_DIR}) include_directories(third_party/toml11) include_directories(third_party/glm) include_directories(third_party/renderdoc) +include_directories(third_party/duckstation) add_subdirectory(third_party/cmrc) @@ -263,7 +265,7 @@ set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA src/core/PICA/shader_interpreter.cpp src/core/PICA/dynapica/shader_rec.cpp src/core/PICA/dynapica/shader_rec_emitter_x64.cpp src/core/PICA/pica_hash.cpp src/core/PICA/dynapica/shader_rec_emitter_arm64.cpp src/core/PICA/shader_gen_glsl.cpp - src/core/PICA/shader_decompiler.cpp + src/core/PICA/shader_decompiler.cpp src/core/PICA/draw_acceleration.cpp ) set(LOADER_SOURCE_FILES src/core/loader/elf.cpp src/core/loader/ncsd.cpp src/core/loader/ncch.cpp src/core/loader/3dsx.cpp src/core/loader/lz77.cpp) @@ -315,7 +317,8 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/audio/miniaudio_device.hpp include/ring_buffer.hpp include/bitfield.hpp include/audio/dsp_shared_mem.hpp include/audio/hle_core.hpp include/capstone.hpp include/audio/aac.hpp include/PICA/pica_frag_config.hpp include/PICA/pica_frag_uniforms.hpp include/PICA/shader_gen_types.hpp include/PICA/shader_decompiler.hpp - include/sdl_sensors.hpp include/renderdoc.hpp include/audio/aac_decoder.hpp + include/PICA/pica_vert_config.hpp include/sdl_sensors.hpp include/PICA/draw_acceleration.hpp include/renderdoc.hpp + include/align.hpp include/audio/aac_decoder.hpp ) cmrc_add_resource_library( @@ -348,7 +351,6 @@ if(ENABLE_LUAJIT AND NOT ANDROID) endif() if(ENABLE_QT_GUI) - include_directories(third_party/duckstation) set(THIRD_PARTY_SOURCE_FILES ${THIRD_PARTY_SOURCE_FILES} third_party/duckstation/window_info.cpp third_party/duckstation/gl/context.cpp) if(APPLE) @@ -391,6 +393,8 @@ if(ENABLE_OPENGL) src/host_shaders/opengl_fragment_shader.frag ) + set(THIRD_PARTY_SOURCE_FILES ${THIRD_PARTY_SOURCE_FILES} third_party/duckstation/gl/stream_buffer.cpp) + set(HEADER_FILES ${HEADER_FILES} ${RENDERER_GL_INCLUDE_FILES}) source_group("Source Files\\Core\\OpenGL Renderer" FILES ${RENDERER_GL_SOURCE_FILES}) @@ -480,7 +484,7 @@ set(ALL_SOURCES ${SOURCE_FILES} ${FS_SOURCE_FILES} ${CRYPTO_SOURCE_FILES} ${KERN target_sources(AlberCore PRIVATE ${ALL_SOURCES}) target_link_libraries(AlberCore PRIVATE dynarmic cryptopp glad resources_console_fonts teakra fdk-aac) -target_link_libraries(AlberCore PUBLIC glad capstone) +target_link_libraries(AlberCore PUBLIC glad capstone fmt::fmt) if(ENABLE_DISCORD_RPC AND NOT ANDROID) target_compile_definitions(AlberCore PUBLIC "PANDA3DS_ENABLE_DISCORD_RPC=1") diff --git a/include/PICA/draw_acceleration.hpp b/include/PICA/draw_acceleration.hpp new file mode 100644 index 00000000..6a66cdc1 --- /dev/null +++ b/include/PICA/draw_acceleration.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include + +#include "helpers.hpp" + +namespace PICA { + struct DrawAcceleration { + static constexpr u32 maxAttribCount = 16; + static constexpr u32 maxLoaderCount = 12; + + struct AttributeInfo { + u32 offset; + u32 stride; + + u8 type; + u8 componentCount; + + std::array fixedValue; // For fixed attributes + }; + + struct Loader { + // Data to upload for this loader + u8* data; + usize size; + }; + + u8* indexBuffer; + + // Minimum and maximum index in the index buffer for a draw call + u16 minimumIndex, maximumIndex; + u32 totalAttribCount; + u32 totalLoaderCount; + u32 enabledAttributeMask; + u32 fixedAttributes; + u32 vertexDataSize; + + std::array attributeInfo; + std::array loaders; + + bool canBeAccelerated; + bool indexed; + bool useShortIndices; + }; +} // namespace PICA \ No newline at end of file diff --git a/include/PICA/gpu.hpp b/include/PICA/gpu.hpp index ac2a49e6..c168a9bf 100644 --- a/include/PICA/gpu.hpp +++ b/include/PICA/gpu.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include "PICA/draw_acceleration.hpp" #include "PICA/dynapica/shader_rec.hpp" #include "PICA/float_types.hpp" #include "PICA/pica_vertex.hpp" @@ -13,6 +14,12 @@ #include "memory.hpp" #include "renderer.hpp" +enum class ShaderExecMode { + Interpreter, // Interpret shaders on the CPU + JIT, // Recompile shaders to CPU machine code + Hardware, // Recompiler shaders to host shaders and run them on the GPU +}; + class GPU { static constexpr u32 regNum = 0x300; static constexpr u32 extRegNum = 0x1000; @@ -45,7 +52,7 @@ class GPU { uint immediateModeVertIndex; uint immediateModeAttrIndex; // Index of the immediate mode attribute we're uploading - template + template void drawArrays(); // Silly method of avoiding linking problems. TODO: Change to something less silly @@ -81,6 +88,7 @@ class GPU { std::unique_ptr renderer; PICA::Vertex getImmediateModeVertex(); + void getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed); public: // 256 entries per LUT with each LUT as its own row forming a 2D image 256 * LUT_COUNT // Encoded in PICA native format diff --git a/include/PICA/pica_vert_config.hpp b/include/PICA/pica_vert_config.hpp new file mode 100644 index 00000000..4300e454 --- /dev/null +++ b/include/PICA/pica_vert_config.hpp @@ -0,0 +1,57 @@ +#pragma once +#include +#include +#include +#include +#include + +#include "PICA/pica_hash.hpp" +#include "PICA/regs.hpp" +#include "PICA/shader.hpp" +#include "bitfield.hpp" +#include "helpers.hpp" + +namespace PICA { + // Configuration struct used + struct VertConfig { + PICAHash::HashType shaderHash; + PICAHash::HashType opdescHash; + u32 entrypoint; + + // PICA registers for configuring shader output->fragment semantic mapping + std::array outmaps{}; + u16 outputMask; + u8 outputCount; + bool usingUbershader; + + // Pad to 56 bytes so that the compiler won't insert unnecessary padding, which in turn will affect our unordered_map lookup + // As the padding will get hashed and memcmp'd... + u32 pad{}; + + bool operator==(const VertConfig& config) const { + // Hash function and equality operator required by std::unordered_map + return std::memcmp(this, &config, sizeof(VertConfig)) == 0; + } + + VertConfig(PICAShader& shader, const std::array& regs, bool usingUbershader) : usingUbershader(usingUbershader) { + shaderHash = shader.getCodeHash(); + opdescHash = shader.getOpdescHash(); + entrypoint = shader.entrypoint; + + outputCount = regs[PICA::InternalRegs::ShaderOutputCount] & 7; + outputMask = regs[PICA::InternalRegs::VertexShaderOutputMask]; + for (int i = 0; i < outputCount; i++) { + // Mask out unused bits + outmaps[i] = regs[PICA::InternalRegs::ShaderOutmap0 + i] & 0x1F1F1F1F; + } + } + }; +} // namespace PICA + +static_assert(sizeof(PICA::VertConfig) == 56); + +// Override std::hash for our vertex config class +template <> +struct std::hash { + std::size_t operator()(const PICA::VertConfig& config) const noexcept { return PICAHash::computeHash((const char*)&config, sizeof(config)); } +}; \ No newline at end of file diff --git a/include/PICA/shader.hpp b/include/PICA/shader.hpp index e5f57c72..1040d2ff 100644 --- a/include/PICA/shader.hpp +++ b/include/PICA/shader.hpp @@ -107,6 +107,11 @@ class PICAShader { alignas(16) std::array inputs; // Attributes passed to the shader alignas(16) std::array outputs; alignas(16) vec4f dummy = vec4f({f24::zero(), f24::zero(), f24::zero(), f24::zero()}); // Dummy register used by the JIT + + // We use a hashmap for matching 3DS shaders to their equivalent compiled code in our shader cache in the shader JIT + // We choose our hash type to be a 64-bit integer by default, as the collision chance is very tiny and generating it is decently optimal + // Ideally we want to be able to support multiple different types of hash depending on compilation settings, but let's get this working first + using Hash = PICAHash::HashType; protected: std::array operandDescriptors; @@ -125,14 +130,13 @@ class PICAShader { std::array callInfo; ShaderType type; - // We use a hashmap for matching 3DS shaders to their equivalent compiled code in our shader cache in the shader JIT - // We choose our hash type to be a 64-bit integer by default, as the collision chance is very tiny and generating it is decently optimal - // Ideally we want to be able to support multiple different types of hash depending on compilation settings, but let's get this working first - using Hash = PICAHash::HashType; - Hash lastCodeHash = 0; // Last hash computed for the shader code (Used for the JIT caching mechanism) Hash lastOpdescHash = 0; // Last hash computed for the operand descriptors (Also used for the JIT) + public: + bool uniformsDirty = false; + + protected: bool codeHashDirty = false; bool opdescHashDirty = false; @@ -284,6 +288,7 @@ class PICAShader { uniform[2] = f24::fromRaw(((floatUniformBuffer[0] & 0xff) << 16) | (floatUniformBuffer[1] >> 16)); uniform[3] = f24::fromRaw(floatUniformBuffer[0] >> 8); } + uniformsDirty = true; } } @@ -295,6 +300,12 @@ class PICAShader { u[1] = getBits<8, 8>(word); u[2] = getBits<16, 8>(word); u[3] = getBits<24, 8>(word); + uniformsDirty = true; + } + + void uploadBoolUniform(u32 value) { + boolUniform = value; + uniformsDirty = true; } void run(); @@ -302,6 +313,10 @@ class PICAShader { Hash getCodeHash(); Hash getOpdescHash(); + + // Returns how big the PICA uniforms are combined. Used for hw accelerated shaders where we upload the uniforms to our GPU. + static constexpr usize totalUniformSize() { return sizeof(floatUniforms) + sizeof(intUniforms) + sizeof(boolUniform); } + void* getUniformPointer() { return static_cast(&floatUniforms); } }; static_assert( diff --git a/include/PICA/shader_decompiler.hpp b/include/PICA/shader_decompiler.hpp index 1253226f..4a5cdc13 100644 --- a/include/PICA/shader_decompiler.hpp +++ b/include/PICA/shader_decompiler.hpp @@ -1,8 +1,11 @@ #pragma once +#include + +#include #include #include #include -#include +#include #include #include "PICA/shader.hpp" @@ -41,9 +44,12 @@ namespace PICA::ShaderGen { explicit Function(u32 start, u32 end) : start(start), end(end) {} bool operator<(const Function& other) const { return AddressRange(start, end) < AddressRange(other.start, other.end); } - std::string getIdentifier() const { return "func_" + std::to_string(start) + "_to_" + std::to_string(end); } - std::string getForwardDecl() const { return "void " + getIdentifier() + "();\n"; } - std::string getCallStatement() const { return getIdentifier() + "()"; } + std::string getIdentifier() const { return fmt::format("fn_{}_{}", start, end); } + // To handle weird control flow, we have to return from each function a bool that indicates whether or not the shader reached an end + // instruction and should thus terminate. This is necessary for games like Rayman and Gravity Falls, which have "END" instructions called + // from within functions deep in the callstack + std::string getForwardDecl() const { return fmt::format("bool fn_{}_{}();\n", start, end); } + std::string getCallStatement() const { return fmt::format("fn_{}_{}()", start, end); } }; std::set functions{}; @@ -93,9 +99,11 @@ namespace PICA::ShaderGen { API api; Language language; + bool compilationError = false; void compileInstruction(u32& pc, bool& finished); - void compileRange(const AddressRange& range); + // Compile range "range" and returns the end PC or if we're "finished" with the program (called an END instruction) + std::pair compileRange(const AddressRange& range); void callFunction(const Function& function); const Function* findFunction(const AddressRange& range); @@ -105,6 +113,7 @@ namespace PICA::ShaderGen { std::string getDest(u32 dest) const; std::string getSwizzlePattern(u32 swizzle) const; std::string getDestSwizzle(u32 destinationMask) const; + const char* getCondition(u32 cond, u32 refX, u32 refY); void setDest(u32 operandDescriptor, const std::string& dest, const std::string& value); // Returns if the instruction uses the typical register encodings most instructions use diff --git a/include/PICA/shader_gen.hpp b/include/PICA/shader_gen.hpp index f938b558..b6751e05 100644 --- a/include/PICA/shader_gen.hpp +++ b/include/PICA/shader_gen.hpp @@ -3,6 +3,7 @@ #include "PICA/gpu.hpp" #include "PICA/pica_frag_config.hpp" +#include "PICA/pica_vert_config.hpp" #include "PICA/regs.hpp" #include "PICA/shader_gen_types.hpp" #include "helpers.hpp" @@ -31,6 +32,8 @@ namespace PICA::ShaderGen { FragmentGenerator(API api, Language language) : api(api), language(language) {} std::string generate(const PICA::FragmentConfig& config, void* driverInfo = nullptr); std::string getDefaultVertexShader(); + // For when PICA shader is acceleration is enabled. Turn the PICA shader source into a proper vertex shader + std::string getVertexShaderAccelerated(const std::string& picaSource, const PICA::VertConfig& vertConfig, bool usingUbershader); void setTarget(API api, Language language) { this->api = api; diff --git a/include/PICA/shader_unit.hpp b/include/PICA/shader_unit.hpp index d8d93160..80e01346 100644 --- a/include/PICA/shader_unit.hpp +++ b/include/PICA/shader_unit.hpp @@ -2,10 +2,9 @@ #include "PICA/shader.hpp" class ShaderUnit { - -public: - PICAShader vs; // Vertex shader - PICAShader gs; // Geometry shader + public: + PICAShader vs; // Vertex shader + PICAShader gs; // Geometry shader ShaderUnit() : vs(ShaderType::Vertex), gs(ShaderType::Geometry) {} void reset(); diff --git a/include/align.hpp b/include/align.hpp new file mode 100644 index 00000000..6b79a656 --- /dev/null +++ b/include/align.hpp @@ -0,0 +1,99 @@ +// SPDX-FileCopyrightText: 2019-2022 Connor McLaughlin +// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) + +#pragma once + +#include + +#include "helpers.hpp" + +#ifdef _MSC_VER +#include +#endif + +namespace Common { + template + constexpr bool isAligned(T value, unsigned int alignment) { + return (value % static_cast(alignment)) == 0; + } + + template + constexpr T alignUp(T value, unsigned int alignment) { + return (value + static_cast(alignment - 1)) / static_cast(alignment) * static_cast(alignment); + } + + template + constexpr T alignDown(T value, unsigned int alignment) { + return value / static_cast(alignment) * static_cast(alignment); + } + + template + constexpr bool isAlignedPow2(T value, unsigned int alignment) { + return (value & static_cast(alignment - 1)) == 0; + } + + template + constexpr T alignUpPow2(T value, unsigned int alignment) { + return (value + static_cast(alignment - 1)) & static_cast(~static_cast(alignment - 1)); + } + + template + constexpr T alignDownPow2(T value, unsigned int alignment) { + return value & static_cast(~static_cast(alignment - 1)); + } + + template + constexpr bool isPow2(T value) { + return (value & (value - 1)) == 0; + } + + template + constexpr T previousPow2(T value) { + if (value == static_cast(0)) return 0; + + value |= (value >> 1); + value |= (value >> 2); + value |= (value >> 4); + if constexpr (sizeof(T) >= 16) value |= (value >> 8); + if constexpr (sizeof(T) >= 32) value |= (value >> 16); + if constexpr (sizeof(T) >= 64) value |= (value >> 32); + return value - (value >> 1); + } + + template + constexpr T nextPow2(T value) { + // https://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 + if (value == static_cast(0)) return 0; + + value--; + value |= (value >> 1); + value |= (value >> 2); + value |= (value >> 4); + if constexpr (sizeof(T) >= 16) value |= (value >> 8); + if constexpr (sizeof(T) >= 32) value |= (value >> 16); + if constexpr (sizeof(T) >= 64) value |= (value >> 32); + value++; + return value; + } + + ALWAYS_INLINE static void* alignedMalloc(size_t size, size_t alignment) { +#ifdef _MSC_VER + return _aligned_malloc(size, alignment); +#else + // Unaligned sizes are slow on macOS. +#ifdef __APPLE__ + if (isPow2(alignment)) size = (size + alignment - 1) & ~(alignment - 1); +#endif + void* ret = nullptr; + return (posix_memalign(&ret, alignment, size) == 0) ? ret : nullptr; +#endif + } + + ALWAYS_INLINE static void alignedFree(void* ptr) { +#ifdef _MSC_VER + _aligned_free(ptr); +#else + free(ptr); +#endif + } +} // namespace Common \ No newline at end of file diff --git a/include/config.hpp b/include/config.hpp index 459f0907..a8ba8946 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -20,11 +20,13 @@ struct EmulatorConfig { #else static constexpr bool ubershaderDefault = true; #endif - + static constexpr bool accelerateShadersDefault = true; + bool shaderJitEnabled = shaderJitDefault; - bool discordRpcEnabled = false; bool useUbershaders = ubershaderDefault; + bool accelerateShaders = accelerateShadersDefault; bool accurateShaderMul = false; + bool discordRpcEnabled = false; // Toggles whether to force shadergen when there's more than N lights active and we're using the ubershader, for better performance bool forceShadergenForLights = true; diff --git a/include/renderdoc.hpp b/include/renderdoc.hpp index 94a0f494..ea2c8a3d 100644 --- a/include/renderdoc.hpp +++ b/include/renderdoc.hpp @@ -35,4 +35,35 @@ namespace Renderdoc { static void setOutputDir(const std::string& path, const std::string& prefix) {} static constexpr bool isSupported() { return false; } } // namespace Renderdoc -#endif \ No newline at end of file +#endif + +namespace Renderdoc { + // RAII scope class that encloses a Renderdoc capture, as long as it's triggered by triggerCapture + struct Scope { + Scope() { Renderdoc::startCapture(); } + ~Scope() { Renderdoc::endCapture(); } + + Scope(const Scope&) = delete; + Scope& operator=(const Scope&) = delete; + + Scope(Scope&&) = delete; + Scope& operator=(const Scope&&) = delete; + }; + + // RAII scope class that encloses a Renderdoc capture. Unlike regular Scope it doesn't wait for a trigger, it will always issue the capture + // trigger on its own and take a capture + struct InstantScope { + InstantScope() { + Renderdoc::triggerCapture(); + Renderdoc::startCapture(); + } + + ~InstantScope() { Renderdoc::endCapture(); } + + InstantScope(const InstantScope&) = delete; + InstantScope& operator=(const InstantScope&) = delete; + + InstantScope(InstantScope&&) = delete; + InstantScope& operator=(const InstantScope&&) = delete; + }; +} // namespace Renderdoc \ No newline at end of file diff --git a/include/renderer.hpp b/include/renderer.hpp index 569a730b..5a1efc77 100644 --- a/include/renderer.hpp +++ b/include/renderer.hpp @@ -1,9 +1,10 @@ #pragma once #include +#include #include #include -#include +#include "PICA/draw_acceleration.hpp" #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" #include "helpers.hpp" @@ -21,9 +22,11 @@ enum class RendererType : s8 { }; struct EmulatorConfig; -class GPU; struct SDL_Window; +class GPU; +class ShaderUnit; + class Renderer { protected: GPU& gpu; @@ -77,7 +80,11 @@ class Renderer { virtual std::string getUbershader() { return ""; } virtual void setUbershader(const std::string& shader) {} - virtual void setUbershaderSetting(bool value) {} + // This function is called on every draw call before parsing vertex data. + // It is responsible for things like looking up which vertex/fragment shaders to use, recompiling them if they don't exist, choosing between + // ubershaders and shadergen, and so on. + // Returns whether this draw is eligible for using hardware-accelerated shaders or if shaders should run on the CPU + virtual bool prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { return false; } // Functions for initializing the graphics context for the Qt frontend, where we don't have the convenience of SDL_Window #ifdef PANDA3DS_FRONTEND_QT diff --git a/include/renderer_gl/gl_state.hpp b/include/renderer_gl/gl_state.hpp index e5591ea0..4085cabc 100644 --- a/include/renderer_gl/gl_state.hpp +++ b/include/renderer_gl/gl_state.hpp @@ -38,7 +38,6 @@ struct GLStateManager { GLuint stencilMask; GLuint boundVAO; - GLuint boundVBO; GLuint currentProgram; GLuint boundUBO; @@ -173,13 +172,6 @@ struct GLStateManager { } } - void bindVBO(GLuint handle) { - if (boundVBO != handle) { - boundVBO = handle; - glBindBuffer(GL_ARRAY_BUFFER, handle); - } - } - void useProgram(GLuint handle) { if (currentProgram != handle) { currentProgram = handle; @@ -195,7 +187,6 @@ struct GLStateManager { } void bindVAO(const OpenGL::VertexArray& vao) { bindVAO(vao.handle()); } - void bindVBO(const OpenGL::VertexBuffer& vbo) { bindVBO(vbo.handle()); } void useProgram(const OpenGL::Program& program) { useProgram(program.handle()); } void setColourMask(bool r, bool g, bool b, bool a) { diff --git a/include/renderer_gl/renderer_gl.hpp b/include/renderer_gl/renderer_gl.hpp index 07069536..fab239f2 100644 --- a/include/renderer_gl/renderer_gl.hpp +++ b/include/renderer_gl/renderer_gl.hpp @@ -3,15 +3,20 @@ #include #include #include +#include +#include #include #include +#include #include "PICA/float_types.hpp" #include "PICA/pica_frag_config.hpp" #include "PICA/pica_hash.hpp" +#include "PICA/pica_vert_config.hpp" #include "PICA/pica_vertex.hpp" #include "PICA/regs.hpp" #include "PICA/shader_gen.hpp" +#include "gl/stream_buffer.h" #include "gl_driver.hpp" #include "gl_state.hpp" #include "helpers.hpp" @@ -29,9 +34,11 @@ class RendererGL final : public Renderer { OpenGL::Program triangleProgram; OpenGL::Program displayProgram; - OpenGL::VertexArray vao; + // VAO for when not using accelerated vertex shaders. Contains attribute declarations matching to the PICA fixed function fragment attributes + OpenGL::VertexArray defaultVAO; + // VAO for when using accelerated vertex shaders. The PICA vertex shader inputs are passed as attributes without CPU processing. + OpenGL::VertexArray hwShaderVAO; OpenGL::VertexBuffer vbo; - bool enableUbershader = true; // Data struct { @@ -54,6 +61,21 @@ class RendererGL final : public Renderer { float oldDepthScale = -1.0; float oldDepthOffset = 0.0; bool oldDepthmapEnable = false; + // Set by prepareForDraw, tells us whether the current draw is using hw-accelerated shader + bool usingAcceleratedShader = false; + bool performIndexedRender = false; + bool usingShortIndices = false; + + // Set by prepareForDraw, metadata for indexed renders + GLuint minimumIndex = 0; + GLuint maximumIndex = 0; + void* hwIndexBufferOffset = nullptr; + + // When doing hw shaders, we cache which attributes are enabled in our VAO to avoid having to enable/disable all attributes on each draw + u32 previousAttributeMask = 0; + + // Cached pointer to the current vertex shader when using HW accelerated shaders + OpenGL::Shader* generatedVertexShader = nullptr; SurfaceCache depthBufferCache; SurfaceCache colourBufferCache; @@ -71,12 +93,51 @@ class RendererGL final : public Renderer { // We can compile this once and then link it with all other generated fragment shaders OpenGL::Shader defaultShadergenVs; GLuint shadergenFragmentUBO; + // UBO for uploading the PICA uniforms when using hw shaders + GLuint hwShaderUniformUBO; + + using StreamBuffer = OpenGLStreamBuffer; + std::unique_ptr hwVertexBuffer; + std::unique_ptr hwIndexBuffer; + + // Cache of fixed attribute values so that we don't do any duplicate updates + std::array, 16> fixedAttrValues; // Cached recompiled fragment shader struct CachedProgram { OpenGL::Program program; }; - std::unordered_map shaderCache; + + struct ShaderCache { + std::unordered_map> vertexShaderCache; + std::unordered_map fragmentShaderCache; + + // Program cache indexed by GLuints for the vertex and fragment shader to use + // Top 32 bits are the vertex shader GLuint, bottom 32 bits are the fs GLuint + std::unordered_map programCache; + + void clear() { + for (auto& it : programCache) { + CachedProgram& cachedProgram = it.second; + cachedProgram.program.free(); + } + + for (auto& it : vertexShaderCache) { + if (it.second.has_value()) { + it.second->free(); + } + } + + for (auto& it : fragmentShaderCache) { + it.second.free(); + } + + programCache.clear(); + vertexShaderCache.clear(); + fragmentShaderCache.clear(); + } + }; + ShaderCache shaderCache; OpenGL::Framebuffer getColourFBO(); OpenGL::Texture getTexture(Texture& tex); @@ -95,6 +156,8 @@ class RendererGL final : public Renderer { void updateFogLUT(); void initGraphicsContextInternal(); + void accelerateVertexUpload(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel); + public: RendererGL(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs) : Renderer(gpu, internalRegs, externalRegs), fragShaderGen(PICA::ShaderGen::API::GL, PICA::ShaderGen::Language::GLSL) {} @@ -112,15 +175,13 @@ class RendererGL final : public Renderer { virtual bool supportsShaderReload() override { return true; } virtual std::string getUbershader() override; virtual void setUbershader(const std::string& shader) override; - - virtual void setUbershaderSetting(bool value) override { enableUbershader = value; } + virtual bool prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) override; std::optional getColourBuffer(u32 addr, PICA::ColorFmt format, u32 width, u32 height, bool createIfnotFound = true); // Note: The caller is responsible for deleting the currently bound FBO before calling this void setFBO(uint handle) { screenFramebuffer.m_handle = handle; } void resetStateManager() { gl.reset(); } - void clearShaderCache(); void initUbershader(OpenGL::Program& program); #ifdef PANDA3DS_FRONTEND_QT diff --git a/src/config.cpp b/src/config.cpp index 70f2189c..331ab137 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -67,6 +67,7 @@ void EmulatorConfig::load() { vsyncEnabled = toml::find_or(gpu, "EnableVSync", true); useUbershaders = toml::find_or(gpu, "UseUbershaders", ubershaderDefault); accurateShaderMul = toml::find_or(gpu, "AccurateShaderMultiplication", false); + accelerateShaders = toml::find_or(gpu, "AccelerateShaders", accelerateShadersDefault); forceShadergenForLights = toml::find_or(gpu, "ForceShadergenForLighting", true); lightShadergenThreshold = toml::find_or(gpu, "ShadergenLightThreshold", 1); @@ -141,6 +142,7 @@ void EmulatorConfig::save() { data["GPU"]["UseUbershaders"] = useUbershaders; data["GPU"]["ForceShadergenForLighting"] = forceShadergenForLights; data["GPU"]["ShadergenLightThreshold"] = lightShadergenThreshold; + data["GPU"]["AccelerateShaders"] = accelerateShaders; data["GPU"]["EnableRenderdoc"] = enableRenderdoc; data["Audio"]["DSPEmulation"] = std::string(Audio::DSPCore::typeToString(dspType)); diff --git a/src/core/PICA/draw_acceleration.cpp b/src/core/PICA/draw_acceleration.cpp new file mode 100644 index 00000000..1850d819 --- /dev/null +++ b/src/core/PICA/draw_acceleration.cpp @@ -0,0 +1,148 @@ +#include "PICA/draw_acceleration.hpp" + +#include +#include + +#include "PICA/gpu.hpp" +#include "PICA/regs.hpp" + +void GPU::getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed) { + accel.indexed = indexed; + accel.totalAttribCount = totalAttribCount; + accel.enabledAttributeMask = 0; + + const u32 vertexBase = ((regs[PICA::InternalRegs::VertexAttribLoc] >> 1) & 0xfffffff) * 16; + const u32 vertexCount = regs[PICA::InternalRegs::VertexCountReg]; // Total # of vertices to transfer + + if (indexed) { + u32 indexBufferConfig = regs[PICA::InternalRegs::IndexBufferConfig]; + u32 indexBufferPointer = vertexBase + (indexBufferConfig & 0xfffffff); + + u8* indexBuffer = getPointerPhys(indexBufferPointer); + u16 minimumIndex = std::numeric_limits::max(); + u16 maximumIndex = 0; + + // Check whether the index buffer uses u16 indices or u8 + accel.useShortIndices = Helpers::getBit<31>(indexBufferConfig); // Indicates whether vert indices are 16-bit or 8-bit + + // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them + if (accel.useShortIndices) { + u16* indexBuffer16 = reinterpret_cast(indexBuffer); + + for (int i = 0; i < vertexCount; i++) { + u16 index = indexBuffer16[i]; + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + } else { + for (int i = 0; i < vertexCount; i++) { + u16 index = u16(indexBuffer[i]); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + } + + accel.indexBuffer = indexBuffer; + accel.minimumIndex = minimumIndex; + accel.maximumIndex = maximumIndex; + } else { + accel.indexBuffer = nullptr; + accel.minimumIndex = regs[PICA::InternalRegs::VertexOffsetReg]; + accel.maximumIndex = accel.minimumIndex + vertexCount - 1; + } + + const u64 vertexCfg = u64(regs[PICA::InternalRegs::AttribFormatLow]) | (u64(regs[PICA::InternalRegs::AttribFormatHigh]) << 32); + const u64 inputAttrCfg = getVertexShaderInputConfig(); + + u32 attrCount = 0; + u32 loaderOffset = 0; + accel.vertexDataSize = 0; + accel.totalLoaderCount = 0; + + for (int i = 0; i < PICA::DrawAcceleration::maxLoaderCount; i++) { + auto& loaderData = attributeInfo[i]; // Get information for this attribute loader + + // This loader is empty, skip it + if (loaderData.componentCount == 0 || loaderData.size == 0) { + continue; + } + + auto& loader = accel.loaders[accel.totalLoaderCount++]; + + // The size of the loader in bytes is equal to the bytes supplied for 1 vertex, multiplied by the number of vertices we'll be uploading + // Which is equal to maximumIndex - minimumIndex + 1 + const u32 bytes = loaderData.size * (accel.maximumIndex - accel.minimumIndex + 1); + loader.size = bytes; + + // Add it to the total vertex data size, aligned to 4 bytes. + accel.vertexDataSize += (bytes + 3) & ~3; + + // Get a pointer to the data where this loader's data is stored + const u32 loaderAddress = vertexBase + loaderData.offset + (accel.minimumIndex * loaderData.size); + loader.data = getPointerPhys(loaderAddress); + + u64 attrCfg = loaderData.getConfigFull(); // Get config1 | (config2 << 32) + u32 attributeOffset = 0; + + for (int component = 0; component < loaderData.componentCount; component++) { + uint attributeIndex = (attrCfg >> (component * 4)) & 0xf; // Get index of attribute in vertexCfg + + // Vertex attributes used as padding + // 12, 13, 14 and 15 are equivalent to 4, 8, 12 and 16 bytes of padding respectively + if (attributeIndex >= 12) [[unlikely]] { + // Align attribute address up to a 4 byte boundary + attributeOffset = (attributeOffset + 3) & -4; + attributeOffset += (attributeIndex - 11) << 2; + continue; + } + + const u32 attribInfo = (vertexCfg >> (attributeIndex * 4)) & 0xf; + const u32 attribType = attribInfo & 0x3; // Type of attribute (sbyte/ubyte/short/float) + const u32 size = (attribInfo >> 2) + 1; // Total number of components + + // Size of each component based on the attribute type + static constexpr u32 sizePerComponent[4] = {1, 1, 2, 4}; + const u32 inputReg = (inputAttrCfg >> (attributeIndex * 4)) & 0xf; + // Mark the attribute as enabled + accel.enabledAttributeMask |= 1 << inputReg; + + auto& attr = accel.attributeInfo[inputReg]; + attr.componentCount = size; + attr.offset = attributeOffset + loaderOffset; + attr.stride = loaderData.size; + attr.type = attribType; + attributeOffset += size * sizePerComponent[attribType]; + } + + loaderOffset += loader.size; + } + + u32 fixedAttributes = fixedAttribMask; + accel.fixedAttributes = 0; + + // Fetch values for all fixed attributes using CLZ on the fixed attribute mask to find the attributes that are actually fixed + while (fixedAttributes != 0) { + // Get index of next fixed attribute and turn it off + const u32 index = std::countr_zero(fixedAttributes); + const u32 mask = 1u << index; + fixedAttributes ^= mask; + + // PICA register this fixed attribute is meant to go to + const u32 inputReg = (inputAttrCfg >> (index * 4)) & 0xf; + const u32 inputRegMask = 1u << inputReg; + + // If this input reg is already used for a non-fixed attribute then it will not be replaced by a fixed attribute + if ((accel.enabledAttributeMask & inputRegMask) == 0) { + vec4f& fixedAttr = shaderUnit.vs.fixedAttributes[index]; + auto& attr = accel.attributeInfo[inputReg]; + + accel.fixedAttributes |= inputRegMask; + + for (int i = 0; i < 4; i++) { + attr.fixedValue[i] = fixedAttr[i].toFloat32(); + } + } + } + + accel.canBeAccelerated = true; +} \ No newline at end of file diff --git a/src/core/PICA/gpu.cpp b/src/core/PICA/gpu.cpp index 3c4d4c5b..2624903f 100644 --- a/src/core/PICA/gpu.cpp +++ b/src/core/PICA/gpu.cpp @@ -117,37 +117,62 @@ void GPU::reset() { externalRegs[Framebuffer1Config] = static_cast(PICA::ColorFmt::RGB8); externalRegs[Framebuffer1Select] = 0; - renderer->setUbershaderSetting(config.useUbershaders); renderer->reset(); } -// Call the correct version of drawArrays based on whether this is an indexed draw (first template parameter) -// And whether we are going to use the shader JIT (second template parameter) -void GPU::drawArrays(bool indexed) { - const bool shaderJITEnabled = ShaderJIT::isAvailable() && config.shaderJitEnabled; - - if (indexed) { - if (shaderJITEnabled) - drawArrays(); - else - drawArrays(); - } else { - if (shaderJITEnabled) - drawArrays(); - else - drawArrays(); - } -} - static std::array vertices; -template -void GPU::drawArrays() { - if constexpr (useShaderJIT) { - shaderJIT.prepare(shaderUnit.vs); +// Call the correct version of drawArrays based on whether this is an indexed draw (first template parameter) +// And whether we are going to use the shader JIT (second template parameter) +void GPU::drawArrays(bool indexed) { + PICA::DrawAcceleration accel; + + if (config.accelerateShaders) { + // If we are potentially going to use hw shaders, gather necessary to do vertex fetch, index buffering, etc on the GPU + // This includes parsing which vertices to upload, getting pointers to the index buffer data & vertex data, and so on + getAcceleratedDrawInfo(accel, indexed); } - setVsOutputMask(regs[PICA::InternalRegs::VertexShaderOutputMask]); + const bool hwShaders = renderer->prepareForDraw(shaderUnit, &accel); + + if (hwShaders) { + // Hardware shaders have their own accelerated code path for draws, so they skip everything here + const PICA::PrimType primType = static_cast(Helpers::getBits<8, 2>(regs[PICA::InternalRegs::PrimitiveConfig])); + // Total # of vertices to render + const u32 vertexCount = regs[PICA::InternalRegs::VertexCountReg]; + + // Note: In the hardware shader path the vertices span shouldn't actually be used as the renderer will perform its own attribute fetching + renderer->drawVertices(primType, std::span(vertices).first(vertexCount)); + } else { + const bool shaderJITEnabled = ShaderJIT::isAvailable() && config.shaderJitEnabled; + + if (indexed) { + if (shaderJITEnabled) { + drawArrays(); + } else { + drawArrays(); + } + } else { + if (shaderJITEnabled) { + drawArrays(); + } else { + drawArrays(); + } + } + } +} + +template +void GPU::drawArrays() { + if constexpr (mode == ShaderExecMode::JIT) { + shaderJIT.prepare(shaderUnit.vs); + } else if constexpr (mode == ShaderExecMode::Hardware) { + // Hardware shaders have their own accelerated code path for draws, so they're not meant to take this path + Helpers::panic("GPU::DrawArrays: Hardware shaders shouldn't take this path!"); + } + + // We can have up to 16 attributes, each one consisting of 4 floats + constexpr u32 maxAttrSizeInFloats = 16 * 4; // Base address for vertex attributes // The vertex base is always on a quadword boundary because the PICA does weird alignment shit any time possible @@ -312,8 +337,6 @@ void GPU::drawArrays() { } // Fill the remaining attribute lanes with default parameters (1.0 for alpha/w, 0.0) for everything else - // Corgi does this although I'm not sure if it's actually needed for anything. - // TODO: Find out while (component < 4) { attribute[component] = (component == 3) ? f24::fromFloat32(1.0) : f24::fromFloat32(0.0); component++; @@ -327,13 +350,13 @@ void GPU::drawArrays() { // Before running the shader, the PICA maps the fetched attributes from the attribute registers to the shader input registers // Based on the SH_ATTRIBUTES_PERMUTATION registers. - // Ie it might attribute #0 to v2, #1 to v7, etc + // Ie it might map attribute #0 to v2, #1 to v7, etc for (int j = 0; j < totalAttribCount; j++) { const u32 mapping = (inputAttrCfg >> (j * 4)) & 0xf; std::memcpy(&shaderUnit.vs.inputs[mapping], ¤tAttributes[j], sizeof(vec4f)); } - if constexpr (useShaderJIT) { + if constexpr (mode == ShaderExecMode::JIT) { shaderJIT.run(shaderUnit.vs); } else { shaderUnit.vs.run(); diff --git a/src/core/PICA/regs.cpp b/src/core/PICA/regs.cpp index f805de60..4c865d12 100644 --- a/src/core/PICA/regs.cpp +++ b/src/core/PICA/regs.cpp @@ -249,6 +249,7 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { // If we've reached 3 verts, issue a draw call // Handle rendering depending on the primitive type if (immediateModeVertIndex == 3) { + renderer->prepareForDraw(shaderUnit, nullptr); renderer->drawVertices(PICA::PrimType::TriangleList, immediateModeVertices); switch (primType) { @@ -300,7 +301,7 @@ void GPU::writeInternalReg(u32 index, u32 value, u32 mask) { } case VertexBoolUniform: { - shaderUnit.vs.boolUniform = value & 0xffff; + shaderUnit.vs.uploadBoolUniform(value & 0xffff); break; } diff --git a/src/core/PICA/shader_decompiler.cpp b/src/core/PICA/shader_decompiler.cpp index 482aa36c..467c4727 100644 --- a/src/core/PICA/shader_decompiler.cpp +++ b/src/core/PICA/shader_decompiler.cpp @@ -1,5 +1,10 @@ #include "PICA/shader_decompiler.hpp" +#include + +#include +#include + #include "config.hpp" using namespace PICA; @@ -13,11 +18,45 @@ void ControlFlow::analyze(const PICAShader& shader, u32 entrypoint) { analysisFailed = false; const Function* function = addFunction(shader, entrypoint, PICAShader::maxInstructionCount); - if (function == nullptr) { + if (function == nullptr || function->exitMode != ExitMode::AlwaysEnd) { analysisFailed = true; } } +// Helpers for merging parallel/series exit methods from Citra +// Merges exit method of two parallel branches. +static ExitMode exitParallel(ExitMode a, ExitMode b) { + if (a == ExitMode::Unknown) { + return b; + } + else if (b == ExitMode::Unknown) { + return a; + } + else if (a == b) { + return a; + } + return ExitMode::Conditional; +} + +// Cascades exit method of two blocks of code. +static ExitMode exitSeries(ExitMode a, ExitMode b) { + assert(a != ExitMode::AlwaysEnd); + + if (a == ExitMode::Unknown) { + return ExitMode::Unknown; + } + + if (a == ExitMode::AlwaysReturn) { + return b; + } + + if (b == ExitMode::Unknown || b == ExitMode::AlwaysEnd) { + return ExitMode::AlwaysEnd; + } + + return ExitMode::Conditional; +} + ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 end, Function::Labels& labels) { // Initialize exit mode to unknown by default, in order to detect things like unending loops auto [it, inserted] = exitMap.emplace(AddressRange(start, end), ExitMode::Unknown); @@ -32,25 +71,132 @@ ExitMode ControlFlow::analyzeFunction(const PICAShader& shader, u32 start, u32 e const u32 opcode = instruction >> 26; switch (opcode) { - case ShaderOpcodes::JMPC: Helpers::panic("Unimplemented control flow operation (JMPC)"); - case ShaderOpcodes::JMPU: Helpers::panic("Unimplemented control flow operation (JMPU)"); - case ShaderOpcodes::IFU: Helpers::panic("Unimplemented control flow operation (IFU)"); - case ShaderOpcodes::IFC: Helpers::panic("Unimplemented control flow operation (IFC)"); - case ShaderOpcodes::CALL: Helpers::panic("Unimplemented control flow operation (CALL)"); - case ShaderOpcodes::CALLC: Helpers::panic("Unimplemented control flow operation (CALLC)"); - case ShaderOpcodes::CALLU: Helpers::panic("Unimplemented control flow operation (CALLU)"); - case ShaderOpcodes::LOOP: Helpers::panic("Unimplemented control flow operation (LOOP)"); - case ShaderOpcodes::END: it->second = ExitMode::AlwaysEnd; return it->second; + case ShaderOpcodes::JMPC: + case ShaderOpcodes::JMPU: { + const u32 dest = getBits<10, 12>(instruction); + // Register this jump address to our outLabels set + labels.insert(dest); + // This opens up 2 parallel paths of execution + auto branchTakenExit = analyzeFunction(shader, dest, end, labels); + auto branchNotTakenExit = analyzeFunction(shader, pc + 1, end, labels); + it->second = exitParallel(branchTakenExit, branchNotTakenExit); + return it->second; + } + + case ShaderOpcodes::IFU: + case ShaderOpcodes::IFC: { + const u32 num = instruction & 0xff; + const u32 dest = getBits<10, 12>(instruction); + + const Function* branchTakenFunc = addFunction(shader, pc + 1, dest); + // Check if analysis of the branch taken func failed and return unknown if it did + if (analysisFailed) { + it->second = ExitMode::Unknown; + return it->second; + } + + // Next analyze the not taken func + ExitMode branchNotTakenExitMode = ExitMode::AlwaysReturn; + if (num != 0) { + const Function* branchNotTakenFunc = addFunction(shader, dest, dest + num); + // Check if analysis failed and return unknown if it did + if (analysisFailed) { + it->second = ExitMode::Unknown; + return it->second; + } + + branchNotTakenExitMode = branchNotTakenFunc->exitMode; + } + + auto parallel = exitParallel(branchTakenFunc->exitMode, branchNotTakenExitMode); + // Both branches of the if/else end, so there's nothing after the call + if (parallel == ExitMode::AlwaysEnd) { + it->second = parallel; + return it->second; + } else { + ExitMode afterConditional = analyzeFunction(shader, dest + num, end, labels); + ExitMode conditionalExitMode = exitSeries(parallel, afterConditional); + it->second = conditionalExitMode; + return it->second; + } + break; + } + + case ShaderOpcodes::CALL: { + const u32 num = instruction & 0xff; + const u32 dest = getBits<10, 12>(instruction); + const Function* calledFunction = addFunction(shader, dest, dest + num); + + // Check if analysis of the branch taken func failed and return unknown if it did + if (analysisFailed) { + it->second = ExitMode::Unknown; + return it->second; + } + + if (calledFunction->exitMode == ExitMode::AlwaysEnd) { + it->second = ExitMode::AlwaysEnd; + return it->second; + } + + // Exit mode of the remainder of this function, after we return from the callee + const ExitMode postCallExitMode = analyzeFunction(shader, pc + 1, end, labels); + const ExitMode exitMode = exitSeries(calledFunction->exitMode, postCallExitMode); + + it->second = exitMode; + return exitMode; + } + + case ShaderOpcodes::CALLC: + case ShaderOpcodes::CALLU: { + const u32 num = instruction & 0xff; + const u32 dest = getBits<10, 12>(instruction); + const Function* calledFunction = addFunction(shader, dest, dest + num); + + // Check if analysis of the branch taken func failed and return unknown if it did + if (analysisFailed) { + it->second = ExitMode::Unknown; + return it->second; + } + + // Exit mode of the remainder of this function, after we return from the callee + const ExitMode postCallExitMode = analyzeFunction(shader, pc + 1, end, labels); + const ExitMode exitMode = exitSeries(exitParallel(calledFunction->exitMode, ExitMode::AlwaysReturn), postCallExitMode); + + it->second = exitMode; + return exitMode; + } + + case ShaderOpcodes::LOOP: { + u32 dest = getBits<10, 12>(instruction); + const Function* loopFunction = addFunction(shader, pc + 1, dest + 1); + if (analysisFailed) { + it->second = ExitMode::Unknown; + return it->second; + } + + if (loopFunction->exitMode == ExitMode::AlwaysEnd) { + it->second = ExitMode::AlwaysEnd; + return it->second; + } + + const ExitMode afterLoop = analyzeFunction(shader, dest + 1, end, labels); + const ExitMode exitMode = exitSeries(loopFunction->exitMode, afterLoop); + it->second = exitMode; + return it->second; + } + + case ShaderOpcodes::END: it->second = ExitMode::AlwaysEnd; return it->second; default: break; } } // A function without control flow instructions will always reach its "return point" and return - return ExitMode::AlwaysReturn; + it->second = ExitMode::AlwaysReturn; + return it->second; } -void ShaderDecompiler::compileRange(const AddressRange& range) { +std::pair ShaderDecompiler::compileRange(const AddressRange& range) { u32 pc = range.start; const u32 end = range.end >= range.start ? range.end : PICAShader::maxInstructionCount; bool finished = false; @@ -58,6 +204,8 @@ void ShaderDecompiler::compileRange(const AddressRange& range) { while (pc < end && !finished) { compileInstruction(pc, finished); } + + return std::make_pair(pc, finished); } const Function* ShaderDecompiler::findFunction(const AddressRange& range) { @@ -71,20 +219,43 @@ const Function* ShaderDecompiler::findFunction(const AddressRange& range) { } void ShaderDecompiler::writeAttributes() { + // Annoyingly, GLES does not support having an array as an input attribute, so declare each attribute separately for now decompiledShader += R"( - layout(location = 0) in vec4 inputs[8]; + layout(location = 0) in vec4 attr0; + layout(location = 1) in vec4 attr1; + layout(location = 2) in vec4 attr2; + layout(location = 3) in vec4 attr3; + layout(location = 4) in vec4 attr4; + layout(location = 5) in vec4 attr5; + layout(location = 6) in vec4 attr6; + layout(location = 7) in vec4 attr7; + layout(location = 8) in vec4 attr8; + layout(location = 9) in vec4 attr9; + layout(location = 10) in vec4 attr10; + layout(location = 11) in vec4 attr11; + layout(location = 12) in vec4 attr12; + layout(location = 13) in vec4 attr13; + layout(location = 14) in vec4 attr14; + layout(location = 15) in vec4 attr15; - layout(std140) uniform PICAShaderUniforms { - vec4 uniform_float[96]; - uvec4 uniform_int; - uint uniform_bool; - }; - - vec4 temp_registers[16]; - vec4 dummy_vec = vec4(0.0); + layout(std140) uniform PICAShaderUniforms { + vec4 uniform_f[96]; + uvec4 uniform_i; + uint uniform_bool; + }; + + vec4 temp[16]; + vec4 out_regs[16]; + vec4 dummy_vec = vec4(0.0); + ivec3 addr_reg = ivec3(0); + bvec2 cmp_reg = bvec2(false); + + vec4 uniform_indexed(int source, int offset) { + int clipped_offs = (offset >= -128 && offset <= 127) ? offset : 0; + uint index = uint(clipped_offs + source) & 127u; + return (index < 96u) ? uniform_f[index] : vec4(1.0); + } )"; - - decompiledShader += "\n"; } std::string ShaderDecompiler::decompile() { @@ -94,11 +265,14 @@ std::string ShaderDecompiler::decompile() { return ""; } - decompiledShader = ""; + compilationError = false; + decompiledShader.clear(); + // Reserve some memory for the shader string to avoid memory allocations + decompiledShader.reserve(256 * 1024); switch (api) { case API::GL: decompiledShader += "#version 410 core\n"; break; - case API::GLES: decompiledShader += "#version 300 es\n"; break; + case API::GLES: decompiledShader += "#version 300 es\nprecision mediump float;\nprecision mediump int;\n"; break; default: break; } @@ -109,7 +283,7 @@ std::string ShaderDecompiler::decompile() { decompiledShader += R"( vec4 safe_mul(vec4 a, vec4 b) { vec4 res = a * b; - return mix(res, mix(mix(vec4(0.0), res, isnan(rhs)), product, isnan(lhs)), isnan(res)); + return mix(res, mix(mix(vec4(0.0), res, isnan(b)), res, isnan(a)), isnan(res)); } )"; } @@ -121,17 +295,61 @@ std::string ShaderDecompiler::decompile() { decompiledShader += "void pica_shader_main() {\n"; AddressRange mainFunctionRange(entrypoint, PICAShader::maxInstructionCount); - callFunction(*findFunction(mainFunctionRange)); - decompiledShader += "}\n"; + auto mainFunc = findFunction(mainFunctionRange); - for (auto& func : controlFlow.functions) { - if (func.outLabels.size() > 0) { - Helpers::panic("Function with out labels"); + decompiledShader += mainFunc->getCallStatement() + ";\n}\n"; + + for (const Function& func : controlFlow.functions) { + if (func.outLabels.empty()) { + decompiledShader += fmt::format("bool {}() {{\n", func.getIdentifier()); + + auto [pc, finished] = compileRange(AddressRange(func.start, func.end)); + if (!finished) { + decompiledShader += "return false;"; + } + + decompiledShader += "}\n"; + } else { + auto labels = func.outLabels; + labels.insert(func.start); + + // If a function has jumps and "labels", this needs to be emulated using a switch-case, with the variable being switched on being the + // current PC + decompiledShader += fmt::format("bool {}() {{\n", func.getIdentifier()); + decompiledShader += fmt::format("uint pc = {}u;\n", func.start); + decompiledShader += "while(true){\nswitch(pc){\n"; + + for (u32 label : labels) { + decompiledShader += fmt::format("case {}u: {{", label); + // Fetch the next label whose address > label + auto it = labels.lower_bound(label + 1); + u32 next = (it == labels.end()) ? func.end : *it; + + auto [endPC, finished] = compileRange(AddressRange(label, next)); + if (endPC > next && !finished) { + labels.insert(endPC); + decompiledShader += fmt::format("pc = {}u; break;", endPC); + } + + // Fallthrough to next label + decompiledShader += "}\n"; + } + + decompiledShader += "default: return false;\n"; + // Exit the switch and loop + decompiledShader += "} }\n"; + + // Exit the function + decompiledShader += "return false;\n"; + decompiledShader += "}\n"; } + } - decompiledShader += "void " + func.getIdentifier() + "() {\n"; - compileRange(AddressRange(func.start, func.end)); - decompiledShader += "}\n"; + // We allow some leeway for "compilation errors" in addition to control flow errors, in cases where eg an unimplemented instruction + // or an instruction that we can't emulate in GLSL is found in the instruction stream. Just like control flow errors, these return an empty string + // and the renderer core will decide to use CPU shaders instead + if (compilationError) [[unlikely]] { + return ""; } return decompiledShader; @@ -139,30 +357,41 @@ std::string ShaderDecompiler::decompile() { std::string ShaderDecompiler::getSource(u32 source, [[maybe_unused]] u32 index) const { if (source < 0x10) { - return "inputs[" + std::to_string(source) + "]"; + return "attr" + std::to_string(source); } else if (source < 0x20) { - return "temp_registers[" + std::to_string(source - 0x10) + "]"; + return "temp[" + std::to_string(source - 0x10) + "]"; } else { const usize floatIndex = (source - 0x20) & 0x7f; - if (floatIndex >= 96) [[unlikely]] { - return "dummy_vec"; + if (index == 0) { + if (floatIndex >= 96) [[unlikely]] { + return "dummy_vec"; + } + return "uniform_f[" + std::to_string(floatIndex) + "]"; + } else { + static constexpr std::array offsets = {"0", "addr_reg.x", "addr_reg.y", "addr_reg.z"}; + return fmt::format("uniform_indexed({}, {})", floatIndex, offsets[index]); } - return "uniform_float[" + std::to_string(floatIndex) + "]"; } } std::string ShaderDecompiler::getDest(u32 dest) const { if (dest < 0x10) { - return "output_registers[" + std::to_string(dest) + "]"; + return "out_regs[" + std::to_string(dest) + "]"; } else if (dest < 0x20) { - return "temp_registers[" + std::to_string(dest - 0x10) + "]"; + return "temp[" + std::to_string(dest - 0x10) + "]"; } else { return "dummy_vec"; } } std::string ShaderDecompiler::getSwizzlePattern(u32 swizzle) const { + // If the swizzle field is this value then the swizzle pattern is .xyzw so we don't need a shuffle + static constexpr uint noSwizzle = 0x1B; + if (swizzle == noSwizzle) { + return ""; + } + static constexpr std::array names = {'x', 'y', 'z', 'w'}; std::string ret(". "); @@ -176,7 +405,6 @@ std::string ShaderDecompiler::getSwizzlePattern(u32 swizzle) const { std::string ShaderDecompiler::getDestSwizzle(u32 destinationMask) const { std::string ret = "."; - if (destinationMask & 0b1000) { ret += "x"; } @@ -208,11 +436,12 @@ void ShaderDecompiler::setDest(u32 operandDescriptor, const std::string& dest, c return; } - decompiledShader += dest + destSwizzle + " = "; - if (writtenLaneCount == 1) { - decompiledShader += "float(" + value + ");\n"; - } else { - decompiledShader += "vec" + std::to_string(writtenLaneCount) + "(" + value + ");\n"; + // Don't write destination swizzle if all lanes are getting written to + decompiledShader += fmt::format("{}{} = ", dest, writtenLaneCount == 4 ? "" : destSwizzle); + if (writtenLaneCount <= 3) { + decompiledShader += fmt::format("({}){};\n", value, destSwizzle); + } else if (writtenLaneCount == 4) { + decompiledShader += fmt::format("{};\n", value); } } @@ -246,26 +475,101 @@ void ShaderDecompiler::compileInstruction(u32& pc, bool& finished) { std::string dest = getDest(destIndex); - if (idx != 0) { - Helpers::panic("GLSL recompiler: Indexed instruction"); - } - - if (invertSources) { - Helpers::panic("GLSL recompiler: Inverted instruction"); - } - switch (opcode) { case ShaderOpcodes::MOV: setDest(operandDescriptor, dest, src1); break; - case ShaderOpcodes::ADD: setDest(operandDescriptor, dest, src1 + " + " + src2); break; - case ShaderOpcodes::MUL: setDest(operandDescriptor, dest, src1 + " * " + src2); break; - case ShaderOpcodes::MAX: setDest(operandDescriptor, dest, "max(" + src1 + ", " + src2 + ")"); break; - case ShaderOpcodes::MIN: setDest(operandDescriptor, dest, "min(" + src1 + ", " + src2 + ")"); break; + case ShaderOpcodes::ADD: setDest(operandDescriptor, dest, fmt::format("{} + {}", src1, src2)); break; + case ShaderOpcodes::MUL: + if (!config.accurateShaderMul) { + setDest(operandDescriptor, dest, fmt::format("{} * {}", src1, src2)); + } else { + setDest(operandDescriptor, dest, fmt::format("safe_mul({}, {})", src1, src2)); + } + break; + case ShaderOpcodes::MAX: setDest(operandDescriptor, dest, fmt::format("max({}, {})", src1, src2)); break; + case ShaderOpcodes::MIN: setDest(operandDescriptor, dest, fmt::format("min({}, {})", src1, src2)); break; - case ShaderOpcodes::DP3: setDest(operandDescriptor, dest, "vec4(dot(" + src1 + ".xyz, " + src2 + ".xyz))"); break; - case ShaderOpcodes::DP4: setDest(operandDescriptor, dest, "vec4(dot(" + src1 + ", " + src2 + "))"); break; - case ShaderOpcodes::RSQ: setDest(operandDescriptor, dest, "vec4(inversesqrt(" + src1 + ".x))"); break; + case ShaderOpcodes::DP3: + if (!config.accurateShaderMul) { + setDest(operandDescriptor, dest, fmt::format("vec4(dot({}.xyz, {}.xyz))", src1, src2)); + } else { + // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec3(1.0) + setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul({}, {}).xyz, vec3(1.0)))", src1, src2)); + } + break; + case ShaderOpcodes::DP4: + if (!config.accurateShaderMul) { + setDest(operandDescriptor, dest, fmt::format("vec4(dot({}, {}))", src1, src2)); + } else { + // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec4(1.0) + setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul({}, {}), vec4(1.0)))", src1, src2)); + } + break; + case ShaderOpcodes::FLR: setDest(operandDescriptor, dest, fmt::format("floor({})", src1)); break; + case ShaderOpcodes::RSQ: setDest(operandDescriptor, dest, fmt::format("vec4(inversesqrt({}.x))", src1)); break; + case ShaderOpcodes::RCP: setDest(operandDescriptor, dest, fmt::format("vec4(1.0 / {}.x)", src1)); break; + case ShaderOpcodes::LG2: setDest(operandDescriptor, dest, fmt::format("vec4(log2({}.x))", src1)); break; + case ShaderOpcodes::EX2: setDest(operandDescriptor, dest, fmt::format("vec4(exp2({}.x))", src1)); break; - default: Helpers::panic("GLSL recompiler: Unknown common opcode: %X", opcode); break; + case ShaderOpcodes::SLT: + case ShaderOpcodes::SLTI: setDest(operandDescriptor, dest, fmt::format("vec4(lessThan({}, {}))", src1, src2)); break; + + case ShaderOpcodes::SGE: + case ShaderOpcodes::SGEI: setDest(operandDescriptor, dest, fmt::format("vec4(greaterThanEqual({}, {}))", src1, src2)); break; + + case ShaderOpcodes::DPH: + case ShaderOpcodes::DPHI: + if (!config.accurateShaderMul) { + setDest(operandDescriptor, dest, fmt::format("vec4(dot(vec4({}.xyz, 1.0), {}))", src1, src2)); + } else { + // A dot product between a and b is equivalent to the per-lane multiplication of a and b followed by a dot product with vec4(1.0) + setDest(operandDescriptor, dest, fmt::format("vec4(dot(safe_mul(vec4({}.xyz, 1.0), {}), vec4(1.0)))", src1, src2)); + } + break; + + case ShaderOpcodes::CMP1: + case ShaderOpcodes::CMP2: { + static constexpr std::array operators = { + // The last 2 operators always return true and are handled specially + "==", "!=", "<", "<=", ">", ">=", "", "", + }; + + const u32 cmpY = getBits<21, 3>(instruction); + const u32 cmpX = getBits<24, 3>(instruction); + + // Compare x first + if (cmpX >= 6) { + decompiledShader += "cmp_reg.x = true;\n"; + } else { + decompiledShader += fmt::format("cmp_reg.x = {}.x {} {}.x;\n", src1, operators[cmpX], src2); + } + + // Then compare Y + if (cmpY >= 6) { + decompiledShader += "cmp_reg.y = true;\n"; + } else { + decompiledShader += fmt::format("cmp_reg.y = {}.y {} {}.y;\n", src1, operators[cmpY], src2); + } + break; + } + + case ShaderOpcodes::MOVA: { + const bool writeX = getBit<3>(operandDescriptor); // Should we write the x component of the address register? + const bool writeY = getBit<2>(operandDescriptor); + + if (writeX && writeY) { + decompiledShader += fmt::format("addr_reg.xy = ivec2({}.xy);\n", src1); + } else if (writeX) { + decompiledShader += fmt::format("addr_reg.x = int({}.x);\n", src1); + } else if (writeY) { + decompiledShader += fmt::format("addr_reg.y = int({}.y);\n", src1); + } + break; + } + + default: + Helpers::warn("GLSL recompiler: Unknown common opcode: %02X. Falling back to CPU shaders", opcode); + compilationError = true; + break; } } else if (opcode >= 0x30 && opcode <= 0x3F) { // MAD and MADI const u32 operandDescriptor = shader.operandDescriptors[instruction & 0x1f]; @@ -299,23 +603,156 @@ void ShaderDecompiler::compileInstruction(u32& pc, bool& finished) { src3 += getSwizzlePattern(swizzle3); std::string dest = getDest(destIndex); - - if (idx != 0) { - Helpers::panic("GLSL recompiler: Indexed instruction"); + if (!config.accurateShaderMul) { + setDest(operandDescriptor, dest, fmt::format("{} * {} + {}", src1, src2, src3)); + } else { + setDest(operandDescriptor, dest, fmt::format("safe_mul({}, {}) + {}", src1, src2, src3)); } - - setDest(operandDescriptor, dest, src1 + " * " + src2 + " + " + src3); } else { switch (opcode) { - case ShaderOpcodes::END: finished = true; return; - default: Helpers::panic("GLSL recompiler: Unknown opcode: %X", opcode); break; + case ShaderOpcodes::JMPC: { + const u32 dest = getBits<10, 12>(instruction); + const u32 condOp = getBits<22, 2>(instruction); + const uint refY = getBit<24>(instruction); + const uint refX = getBit<25>(instruction); + const char* condition = getCondition(condOp, refX, refY); + + decompiledShader += fmt::format("if ({}) {{ pc = {}u; break; }}\n", condition, dest); + break; + } + + case ShaderOpcodes::JMPU: { + const u32 dest = getBits<10, 12>(instruction); + const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check + const u32 mask = 1u << bit; + const u32 test = (instruction & 1) ^ 1; // If the LSB is 0 we jump if bit = 1, otherwise 0 + + decompiledShader += fmt::format("if ((uniform_bool & {}u) {} 0u) {{ pc = {}u; break; }}\n", mask, (test != 0) ? "!=" : "==", dest); + break; + } + + case ShaderOpcodes::IFU: + case ShaderOpcodes::IFC: { + const u32 num = instruction & 0xff; + const u32 dest = getBits<10, 12>(instruction); + const Function* conditionalFunc = findFunction(AddressRange(pc + 1, dest)); + + if (opcode == ShaderOpcodes::IFC) { + const u32 condOp = getBits<22, 2>(instruction); + const uint refY = getBit<24>(instruction); + const uint refX = getBit<25>(instruction); + const char* condition = getCondition(condOp, refX, refY); + + decompiledShader += fmt::format("if ({}) {{", condition); + } else { + const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check + const u32 mask = 1u << bit; + + decompiledShader += fmt::format("if ((uniform_bool & {}u) != 0u) {{", mask); + } + + callFunction(*conditionalFunc); + decompiledShader += "}\n"; + + pc = dest; + if (num > 0) { + const Function* elseFunc = findFunction(AddressRange(dest, dest + num)); + pc = dest + num; + + decompiledShader += "else { "; + callFunction(*elseFunc); + decompiledShader += "}\n"; + + if (conditionalFunc->exitMode == ExitMode::AlwaysEnd && elseFunc->exitMode == ExitMode::AlwaysEnd) { + finished = true; + return; + } + } + + return; + } + + case ShaderOpcodes::CALL: + case ShaderOpcodes::CALLC: + case ShaderOpcodes::CALLU: { + const u32 num = instruction & 0xff; + const u32 dest = getBits<10, 12>(instruction); + const Function* calledFunc = findFunction(AddressRange(dest, dest + num)); + + // Handle conditions for CALLC/CALLU + if (opcode == ShaderOpcodes::CALLC) { + const u32 condOp = getBits<22, 2>(instruction); + const uint refY = getBit<24>(instruction); + const uint refX = getBit<25>(instruction); + const char* condition = getCondition(condOp, refX, refY); + + decompiledShader += fmt::format("if ({}) {{", condition); + } else if (opcode == ShaderOpcodes::CALLU) { + const u32 bit = getBits<22, 4>(instruction); // Bit of the bool uniform to check + const u32 mask = 1u << bit; + + decompiledShader += fmt::format("if ((uniform_bool & {}u) != 0u) {{", mask); + } + + callFunction(*calledFunc); + + // Close brackets for CALLC/CALLU + if (opcode != ShaderOpcodes::CALL) { + decompiledShader += "}"; + } + + if (opcode == ShaderOpcodes::CALL && calledFunc->exitMode == ExitMode::AlwaysEnd) { + finished = true; + return; + } + break; + } + + case ShaderOpcodes::LOOP: { + const u32 dest = getBits<10, 12>(instruction); + const u32 uniformIndex = getBits<22, 2>(instruction); + + // loop counter = uniform.y + decompiledShader += fmt::format("addr_reg.z = int((uniform_i[{}] >> 8u) & 0xFFu);\n", uniformIndex); + decompiledShader += fmt::format( + "for (uint loopCtr{} = 0u; loopCtr{} <= (uniform_i[{}] & 0xFFu); loopCtr{}++, addr_reg.z += int((uniform_i[{}] >> " + "16u) & 0xFFu)) {{\n", + pc, pc, uniformIndex, pc, uniformIndex + ); + + AddressRange range(pc + 1, dest + 1); + const Function* func = findFunction(range); + callFunction(*func); + decompiledShader += "}\n"; + + // Jump to the end of the loop. We don't want to compile the code inside the loop again. + // This will be incremented by 1 due to the pc++ at the end of this loop. + pc = dest; + + if (func->exitMode == ExitMode::AlwaysEnd) { + finished = true; + return; + } + break; + } + + case ShaderOpcodes::END: + decompiledShader += "return true;\n"; + finished = true; + return; + + case ShaderOpcodes::NOP: break; + + default: + Helpers::warn("GLSL recompiler: Unknown opcode: %02X. Falling back to CPU shaders", opcode); + compilationError = true; + break; } } pc++; } - bool ShaderDecompiler::usesCommonEncoding(u32 instruction) const { const u32 opcode = instruction >> 26; switch (opcode) { @@ -339,16 +776,57 @@ bool ShaderDecompiler::usesCommonEncoding(u32 instruction) const { case ShaderOpcodes::SLT: case ShaderOpcodes::SLTI: case ShaderOpcodes::SGE: - case ShaderOpcodes::SGEI: return true; + case ShaderOpcodes::SGEI: + case ShaderOpcodes::LITP: return true; default: return false; } } -void ShaderDecompiler::callFunction(const Function& function) { decompiledShader += function.getCallStatement() + ";\n"; } +void ShaderDecompiler::callFunction(const Function& function) { + switch (function.exitMode) { + // This function always ends, so call it and return true to signal that we're gonna be ending the shader + case ExitMode::AlwaysEnd: decompiledShader += function.getCallStatement() + ";\nreturn true;\n"; break; + // This function will potentially end. Call it, see if it returns that it ended, and return that we're ending if it did + case ExitMode::Conditional: decompiledShader += fmt::format("if ({}) {{ return true; }}\n", function.getCallStatement()); break; + // This function will not end. Just call it like a normal function. + default: decompiledShader += function.getCallStatement() + ";\n"; break; + } +} std::string ShaderGen::decompileShader(PICAShader& shader, EmulatorConfig& config, u32 entrypoint, API api, Language language) { ShaderDecompiler decompiler(shader, config, entrypoint, api, language); return decompiler.decompile(); } + +const char* ShaderDecompiler::getCondition(u32 cond, u32 refX, u32 refY) { + static constexpr std::array conditions = { + // ref(Y, X) = (0, 0) + "!all(cmp_reg)", + "all(not(cmp_reg))", + "!cmp_reg.x", + "!cmp_reg.y", + + // ref(Y, X) = (0, 1) + "cmp_reg.x || !cmp_reg.y", + "cmp_reg.x && !cmp_reg.y", + "cmp_reg.x", + "!cmp_reg.y", + + // ref(Y, X) = (1, 0) + "!cmp_reg.x || cmp_reg.y", + "!cmp_reg.x && cmp_reg.y", + "!cmp_reg.x", + "cmp_reg.y", + + // ref(Y, X) = (1, 1) + "any(cmp_reg)", + "all(cmp_reg)", + "cmp_reg.x", + "cmp_reg.y", + }; + const u32 key = (cond & 0b11) | (refX << 2) | (refY << 3); + + return conditions[key]; +} diff --git a/src/core/PICA/shader_gen_glsl.cpp b/src/core/PICA/shader_gen_glsl.cpp index 13d5aa58..44a75134 100644 --- a/src/core/PICA/shader_gen_glsl.cpp +++ b/src/core/PICA/shader_gen_glsl.cpp @@ -1,3 +1,7 @@ +#include + +#include + #include "PICA/pica_frag_config.hpp" #include "PICA/regs.hpp" #include "PICA/shader_gen.hpp" @@ -702,6 +706,113 @@ void FragmentGenerator::compileFog(std::string& shader, const PICA::FragmentConf shader += "combinerOutput.rgb = mix(fog_color, combinerOutput.rgb, fog_factor);"; } +std::string FragmentGenerator::getVertexShaderAccelerated(const std::string& picaSource, const PICA::VertConfig& vertConfig, bool usingUbershader) { + // First, calculate output register -> Fixed function fragment semantics based on the VAO config + // This array contains the mappings for the 32 fixed function semantics (8 variables, with 4 lanes each). + // Each entry is a pair, containing the output reg to use for this semantic (first) and which lane of that register (second) + std::array, 32> outputMappings{}; + // Output registers adjusted according to VS_OUTPUT_MASK, which handles enabling and disabling output attributes + std::array vsOutputRegisters; + + { + uint count = 0; + u16 outputMask = vertConfig.outputMask; + + // See which registers are actually enabled and ignore the disabled ones + for (int i = 0; i < 16; i++) { + if (outputMask & 1) { + vsOutputRegisters[count++] = i; + } + + outputMask >>= 1; + } + + // For the others, map the index to a vs output directly (TODO: What does hw actually do?) + for (; count < 16; count++) { + vsOutputRegisters[count] = count; + } + + for (int i = 0; i < vertConfig.outputCount; i++) { + const u32 config = vertConfig.outmaps[i]; + for (int j = 0; j < 4; j++) { + const u32 mapping = (config >> (j * 8)) & 0x1F; + outputMappings[mapping] = std::make_pair(vsOutputRegisters[i], j); + } + } + } + + auto getSemanticName = [&](u32 semanticIndex) { + auto [reg, lane] = outputMappings[semanticIndex]; + return fmt::format("out_regs[{}][{}]", reg, lane); + }; + + std::string semantics = fmt::format( + R"( + vec4 a_coords = vec4({}, {}, {}, {}); + vec4 a_quaternion = vec4({}, {}, {}, {}); + vec4 a_vertexColour = vec4({}, {}, {}, {}); + vec2 a_texcoord0 = vec2({}, {}); + float a_texcoord0_w = {}; + vec2 a_texcoord1 = vec2({}, {}); + vec2 a_texcoord2 = vec2({}, {}); + vec3 a_view = vec3({}, {}, {}); +)", + getSemanticName(0), getSemanticName(1), getSemanticName(2), getSemanticName(3), getSemanticName(4), getSemanticName(5), getSemanticName(6), + getSemanticName(7), getSemanticName(8), getSemanticName(9), getSemanticName(10), getSemanticName(11), getSemanticName(12), + getSemanticName(13), getSemanticName(16), getSemanticName(14), getSemanticName(15), getSemanticName(22), getSemanticName(23), + getSemanticName(18), getSemanticName(19), getSemanticName(20) + ); + + if (usingUbershader) { + Helpers::panic("Unimplemented: GetVertexShaderAccelerated for ubershader"); + return picaSource; + } else { + // TODO: Uniforms and don't hardcode fixed-function semantic indices... + std::string ret = picaSource; + if (api == API::GLES) { + ret += "\n#define USING_GLES\n"; + } + + ret += uniformDefinition; + + ret += R"( +out vec4 v_quaternion; +out vec4 v_colour; +out vec3 v_texcoord0; +out vec2 v_texcoord1; +out vec3 v_view; +out vec2 v_texcoord2; + +#ifndef USING_GLES + out float gl_ClipDistance[2]; +#endif + +void main() { + pica_shader_main(); +)"; + // Transfer fixed function fragment registers from vertex shader output to the fragment shader + ret += semantics; + + ret += R"( + gl_Position = a_coords; + vec4 colourAbs = abs(a_vertexColour); + v_colour = min(colourAbs, vec4(1.f)); + + v_texcoord0 = vec3(a_texcoord0.x, 1.0 - a_texcoord0.y, a_texcoord0_w); + v_texcoord1 = vec2(a_texcoord1.x, 1.0 - a_texcoord1.y); + v_texcoord2 = vec2(a_texcoord2.x, 1.0 - a_texcoord2.y); + v_view = a_view; + v_quaternion = a_quaternion; + +#ifndef USING_GLES + gl_ClipDistance[0] = -a_coords.z; + gl_ClipDistance[1] = dot(clipCoords, a_coords); +#endif +})"; + return ret; + } +} + void FragmentGenerator::compileLogicOps(std::string& shader, const PICA::FragmentConfig& config) { if (api != API::GLES) [[unlikely]] { Helpers::warn("Shadergen: Unsupported API for compileLogicOps"); diff --git a/src/core/PICA/shader_unit.cpp b/src/core/PICA/shader_unit.cpp index 759849a8..6b291d31 100644 --- a/src/core/PICA/shader_unit.cpp +++ b/src/core/PICA/shader_unit.cpp @@ -34,4 +34,5 @@ void PICAShader::reset() { codeHashDirty = true; opdescHashDirty = true; + uniformsDirty = true; } \ No newline at end of file diff --git a/src/core/renderer_gl/gl_state.cpp b/src/core/renderer_gl/gl_state.cpp index 3d1c0681..785cac41 100644 --- a/src/core/renderer_gl/gl_state.cpp +++ b/src/core/renderer_gl/gl_state.cpp @@ -73,10 +73,7 @@ void GLStateManager::resetVAO() { } void GLStateManager::resetBuffers() { - boundVBO = 0; boundUBO = 0; - - glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_UNIFORM_BUFFER, 0); } diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index ecbee3a2..30f9be91 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -2,13 +2,15 @@ #include +#include #include -#include "config.hpp" #include "PICA/float_types.hpp" -#include "PICA/pica_frag_uniforms.hpp" #include "PICA/gpu.hpp" +#include "PICA/pica_frag_uniforms.hpp" #include "PICA/regs.hpp" +#include "PICA/shader_decompiler.hpp" +#include "config.hpp" #include "math_util.hpp" CMRC_DECLARE(RendererGL); @@ -24,7 +26,7 @@ void RendererGL::reset() { colourBufferCache.reset(); textureCache.reset(); - clearShaderCache(); + shaderCache.clear(); // Init the colour/depth buffer settings to some random defaults on reset colourBufferLoc = 0; @@ -77,40 +79,56 @@ void RendererGL::initGraphicsContextInternal() { gl.useProgram(displayProgram); glUniform1i(OpenGL::uniformLocation(displayProgram, "u_texture"), 0); // Init sampler object + // Create stream buffers for vertex, index and uniform buffers + static constexpr usize hwIndexBufferSize = 2_MB; + static constexpr usize hwVertexBufferSize = 16_MB; + + hwIndexBuffer = StreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, hwIndexBufferSize); + hwVertexBuffer = StreamBuffer::Create(GL_ARRAY_BUFFER, hwVertexBufferSize); + // Allocate memory for the shadergen fragment uniform UBO glGenBuffers(1, &shadergenFragmentUBO); gl.bindUBO(shadergenFragmentUBO); glBufferData(GL_UNIFORM_BUFFER, sizeof(PICA::FragmentUniforms), nullptr, GL_DYNAMIC_DRAW); - vbo.createFixedSize(sizeof(Vertex) * vertexBufferSize, GL_STREAM_DRAW); - gl.bindVBO(vbo); - vao.create(); - gl.bindVAO(vao); + // Allocate memory for the accelerated vertex shader uniform UBO + glGenBuffers(1, &hwShaderUniformUBO); + gl.bindUBO(hwShaderUniformUBO); + glBufferData(GL_UNIFORM_BUFFER, PICAShader::totalUniformSize(), nullptr, GL_DYNAMIC_DRAW); + + vbo.createFixedSize(sizeof(Vertex) * vertexBufferSize * 2, GL_STREAM_DRAW); + vbo.bind(); + // Initialize the VAO used when not using hw shaders + defaultVAO.create(); + gl.bindVAO(defaultVAO); // Position (x, y, z, w) attributes - vao.setAttributeFloat(0, 4, sizeof(Vertex), offsetof(Vertex, s.positions)); - vao.enableAttribute(0); + defaultVAO.setAttributeFloat(0, 4, sizeof(Vertex), offsetof(Vertex, s.positions)); + defaultVAO.enableAttribute(0); // Quaternion attribute - vao.setAttributeFloat(1, 4, sizeof(Vertex), offsetof(Vertex, s.quaternion)); - vao.enableAttribute(1); + defaultVAO.setAttributeFloat(1, 4, sizeof(Vertex), offsetof(Vertex, s.quaternion)); + defaultVAO.enableAttribute(1); // Colour attribute - vao.setAttributeFloat(2, 4, sizeof(Vertex), offsetof(Vertex, s.colour)); - vao.enableAttribute(2); + defaultVAO.setAttributeFloat(2, 4, sizeof(Vertex), offsetof(Vertex, s.colour)); + defaultVAO.enableAttribute(2); // UV 0 attribute - vao.setAttributeFloat(3, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord0)); - vao.enableAttribute(3); + defaultVAO.setAttributeFloat(3, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord0)); + defaultVAO.enableAttribute(3); // UV 1 attribute - vao.setAttributeFloat(4, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord1)); - vao.enableAttribute(4); + defaultVAO.setAttributeFloat(4, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord1)); + defaultVAO.enableAttribute(4); // UV 0 W-component attribute - vao.setAttributeFloat(5, 1, sizeof(Vertex), offsetof(Vertex, s.texcoord0_w)); - vao.enableAttribute(5); + defaultVAO.setAttributeFloat(5, 1, sizeof(Vertex), offsetof(Vertex, s.texcoord0_w)); + defaultVAO.enableAttribute(5); // View - vao.setAttributeFloat(6, 3, sizeof(Vertex), offsetof(Vertex, s.view)); - vao.enableAttribute(6); + defaultVAO.setAttributeFloat(6, 3, sizeof(Vertex), offsetof(Vertex, s.view)); + defaultVAO.enableAttribute(6); // UV 2 attribute - vao.setAttributeFloat(7, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord2)); - vao.enableAttribute(7); + defaultVAO.setAttributeFloat(7, 2, sizeof(Vertex), offsetof(Vertex, s.texcoord2)); + defaultVAO.enableAttribute(7); + + // Initialize the VAO used for hw shaders + hwShaderVAO.create(); dummyVBO.create(); dummyVAO.create(); @@ -165,6 +183,12 @@ void RendererGL::initGraphicsContextInternal() { OpenGL::clearColor(); OpenGL::setViewport(oldViewport[0], oldViewport[1], oldViewport[2], oldViewport[3]); + // Initialize fixed attributes + for (int i = 0; i < fixedAttrValues.size(); i++) { + fixedAttrValues[i] = {0.f, 0.f, 0.f, 0.f}; + glVertexAttrib4f(i, 0.0, 0.0, 0.0, 0.0); + } + reset(); // Populate our driver info structure @@ -418,29 +442,14 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v OpenGL::Triangle, }; - bool usingUbershader = enableUbershader; - if (usingUbershader) { - const bool lightsEnabled = (regs[InternalRegs::LightingEnable] & 1) != 0; - const uint lightCount = (regs[InternalRegs::LightNumber] & 0x7) + 1; - - // Emulating lights in the ubershader is incredibly slow, so we've got an option to render draws using moret han N lights via shadergen - // This way we generate fewer shaders overall than with full shadergen, but don't tank performance - if (emulatorConfig->forceShadergenForLights && lightsEnabled && lightCount >= emulatorConfig->lightShadergenThreshold) { - usingUbershader = false; - } - } - - if (usingUbershader) { - gl.useProgram(triangleProgram); - } else { - OpenGL::Program& program = getSpecializedShader(); - gl.useProgram(program); - } - const auto primitiveTopology = primTypes[static_cast(primType)]; gl.disableScissor(); - gl.bindVBO(vbo); - gl.bindVAO(vao); + + // If we're using accelerated shaders, the hw VAO, VBO and EBO objects will have already been bound in prepareForDraw + if (!usingAcceleratedShader) { + vbo.bind(); + gl.bindVAO(defaultVAO); + } gl.enableClipPlane(0); // Clipping plane 0 is always enabled if (regs[PICA::InternalRegs::ClipEnable] & 1) { @@ -458,38 +467,9 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v const int depthFunc = getBits<4, 3>(depthControl); const int colourMask = getBits<8, 4>(depthControl); gl.setColourMask(colourMask & 1, colourMask & 2, colourMask & 4, colourMask & 8); - static constexpr std::array depthModes = {GL_NEVER, GL_ALWAYS, GL_EQUAL, GL_NOTEQUAL, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL}; - // Update ubershader uniforms - if (usingUbershader) { - const float depthScale = f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); - const float depthOffset = f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); - const bool depthMapEnable = regs[PICA::InternalRegs::DepthmapEnable] & 1; - - if (oldDepthScale != depthScale) { - oldDepthScale = depthScale; - glUniform1f(ubershaderData.depthScaleLoc, depthScale); - } - - if (oldDepthOffset != depthOffset) { - oldDepthOffset = depthOffset; - glUniform1f(ubershaderData.depthOffsetLoc, depthOffset); - } - - if (oldDepthmapEnable != depthMapEnable) { - oldDepthmapEnable = depthMapEnable; - glUniform1i(ubershaderData.depthmapEnableLoc, depthMapEnable); - } - - // Upload PICA Registers as a single uniform. The shader needs access to the rasterizer registers (for depth, starting from index 0x48) - // The texturing and the fragment lighting registers. Therefore we upload them all in one go to avoid multiple slow uniform updates - glUniform1uiv(ubershaderData.picaRegLoc, 0x200 - 0x48, ®s[0x48]); - setupUbershaderTexEnv(); - } - bindTexturesToSlots(); - if (gpu.fogLUTDirty) { updateFogLUT(); } @@ -532,8 +512,22 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v setupStencilTest(stencilEnable); - vbo.bufferVertsSub(vertices); - OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); + if (!usingAcceleratedShader) { + vbo.bufferVertsSub(vertices); + OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); + } else { + if (performIndexedRender) { + // When doing indexed rendering, use glDrawRangeElementsBaseVertex to issue the indexed draw + hwIndexBuffer->Bind(); + glDrawRangeElementsBaseVertex( + primitiveTopology, minimumIndex, maximumIndex, GLsizei(vertices.size()), usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, + hwIndexBufferOffset, -GLint(minimumIndex) + ); + } else { + // When doing non-indexed rendering, just use glDrawArrays + OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); + } + } } void RendererGL::display() { @@ -840,7 +834,8 @@ std::optional RendererGL::getColourBuffer(u32 addr, PICA::ColorFmt } OpenGL::Program& RendererGL::getSpecializedShader() { - constexpr uint uboBlockBinding = 2; + constexpr uint vsUBOBlockBinding = 1; + constexpr uint fsUBOBlockBinding = 2; PICA::FragmentConfig fsConfig(regs); // If we're not on GLES, ignore the logic op configuration and don't generate redundant shaders for it, since we use hw logic ops @@ -848,30 +843,44 @@ OpenGL::Program& RendererGL::getSpecializedShader() { fsConfig.outConfig.logicOpMode = PICA::LogicOpMode(0); #endif - CachedProgram& programEntry = shaderCache[fsConfig]; + OpenGL::Shader& fragShader = shaderCache.fragmentShaderCache[fsConfig]; + if (!fragShader.exists()) { + std::string fs = fragShaderGen.generate(fsConfig); + fragShader.create({fs.c_str(), fs.size()}, OpenGL::Fragment); + } + + // Get the handle of the current vertex shader + OpenGL::Shader& vertexShader = usingAcceleratedShader ? *generatedVertexShader : defaultShadergenVs; + // And form the key for looking up a shader program + const u64 programKey = (u64(vertexShader.handle()) << 32) | u64(fragShader.handle()); + + CachedProgram& programEntry = shaderCache.programCache[programKey]; OpenGL::Program& program = programEntry.program; if (!program.exists()) { - std::string fs = fragShaderGen.generate(fsConfig, &driverInfo); - - OpenGL::Shader fragShader({fs.c_str(), fs.size()}, OpenGL::Fragment); - program.create({defaultShadergenVs, fragShader}); + program.create({vertexShader, fragShader}); gl.useProgram(program); - fragShader.free(); - // Init sampler objects. Texture 0 goes in texture unit 0, texture 1 in TU 1, texture 2 in TU 2, and the light maps go in TU 3 glUniform1i(OpenGL::uniformLocation(program, "u_tex0"), 0); glUniform1i(OpenGL::uniformLocation(program, "u_tex1"), 1); glUniform1i(OpenGL::uniformLocation(program, "u_tex2"), 2); glUniform1i(OpenGL::uniformLocation(program, "u_tex_luts"), 3); - // Set up the binding for our UBO. Sadly we can't specify it in the shader like normal people, + // Set up the binding for our UBOs. Sadly we can't specify it in the shader like normal people, // As it's an OpenGL 4.2 feature that MacOS doesn't support... - uint uboIndex = glGetUniformBlockIndex(program.handle(), "FragmentUniforms"); - glUniformBlockBinding(program.handle(), uboIndex, uboBlockBinding); + uint fsUBOIndex = glGetUniformBlockIndex(program.handle(), "FragmentUniforms"); + glUniformBlockBinding(program.handle(), fsUBOIndex, fsUBOBlockBinding); + + if (usingAcceleratedShader) { + uint vertexUBOIndex = glGetUniformBlockIndex(program.handle(), "PICAShaderUniforms"); + glUniformBlockBinding(program.handle(), vertexUBOIndex, vsUBOBlockBinding); + } + } + glBindBufferBase(GL_UNIFORM_BUFFER, fsUBOBlockBinding, shadergenFragmentUBO); + if (usingAcceleratedShader) { + glBindBufferBase(GL_UNIFORM_BUFFER, vsUBOBlockBinding, hwShaderUniformUBO); } - glBindBufferBase(GL_UNIFORM_BUFFER, uboBlockBinding, shadergenFragmentUBO); // Upload uniform data to our shader's UBO PICA::FragmentUniforms uniforms; @@ -961,6 +970,101 @@ OpenGL::Program& RendererGL::getSpecializedShader() { return program; } +bool RendererGL::prepareForDraw(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { + // First we figure out if we will be using an ubershader + bool usingUbershader = emulatorConfig->useUbershaders; + if (usingUbershader) { + const bool lightsEnabled = (regs[InternalRegs::LightingEnable] & 1) != 0; + const uint lightCount = (regs[InternalRegs::LightNumber] & 0x7) + 1; + + // Emulating lights in the ubershader is incredibly slow, so we've got an option to render draws using moret han N lights via shadergen + // This way we generate fewer shaders overall than with full shadergen, but don't tank performance + if (emulatorConfig->forceShadergenForLights && lightsEnabled && lightCount >= emulatorConfig->lightShadergenThreshold) { + usingUbershader = false; + } + } + + // Then we figure out if we will use hw accelerated shaders, and try to fetch our shader + // TODO: Ubershader support for accelerated shaders + usingAcceleratedShader = emulatorConfig->accelerateShaders && !usingUbershader && accel != nullptr && accel->canBeAccelerated; + + if (usingAcceleratedShader) { + PICA::VertConfig vertexConfig(shaderUnit.vs, regs, usingUbershader); + + std::optional& shader = shaderCache.vertexShaderCache[vertexConfig]; + // If the optional is false, we have never tried to recompile the shader before. Try to recompile it and see if it works. + if (!shader.has_value()) { + // Initialize shader to a "null" shader (handle == 0) + shader = OpenGL::Shader(); + + std::string picaShaderSource = PICA::ShaderGen::decompileShader( + shaderUnit.vs, *emulatorConfig, shaderUnit.vs.entrypoint, + Helpers::isAndroid() ? PICA::ShaderGen::API::GLES : PICA::ShaderGen::API::GL, PICA::ShaderGen::Language::GLSL + ); + + // Empty source means compilation error, if the source is not empty then we convert the recompiled PICA code into a valid shader and upload + // it to the GPU + if (!picaShaderSource.empty()) { + std::string vertexShaderSource = fragShaderGen.getVertexShaderAccelerated(picaShaderSource, vertexConfig, usingUbershader); + shader->create({vertexShaderSource}, OpenGL::Vertex); + } + } + + // Shader generation did not work out, so set usingAcceleratedShader to false + if (!shader->exists()) { + usingAcceleratedShader = false; + } else { + generatedVertexShader = &(*shader); + gl.bindUBO(hwShaderUniformUBO); + + if (shaderUnit.vs.uniformsDirty) { + shaderUnit.vs.uniformsDirty = false; + glBufferSubData(GL_UNIFORM_BUFFER, 0, PICAShader::totalUniformSize(), shaderUnit.vs.getUniformPointer()); + } + + performIndexedRender = accel->indexed; + minimumIndex = GLsizei(accel->minimumIndex); + maximumIndex = GLsizei(accel->maximumIndex); + + // Upload vertex data and index buffer data to our GPU + accelerateVertexUpload(shaderUnit, accel); + } + } + + if (!usingUbershader) { + OpenGL::Program& program = getSpecializedShader(); + gl.useProgram(program); + } else { // Bind ubershader & load ubershader uniforms + gl.useProgram(triangleProgram); + + const float depthScale = f24::fromRaw(regs[PICA::InternalRegs::DepthScale] & 0xffffff).toFloat32(); + const float depthOffset = f24::fromRaw(regs[PICA::InternalRegs::DepthOffset] & 0xffffff).toFloat32(); + const bool depthMapEnable = regs[PICA::InternalRegs::DepthmapEnable] & 1; + + if (oldDepthScale != depthScale) { + oldDepthScale = depthScale; + glUniform1f(ubershaderData.depthScaleLoc, depthScale); + } + + if (oldDepthOffset != depthOffset) { + oldDepthOffset = depthOffset; + glUniform1f(ubershaderData.depthOffsetLoc, depthOffset); + } + + if (oldDepthmapEnable != depthMapEnable) { + oldDepthmapEnable = depthMapEnable; + glUniform1i(ubershaderData.depthmapEnableLoc, depthMapEnable); + } + + // Upload PICA Registers as a single uniform. The shader needs access to the rasterizer registers (for depth, starting from index 0x48) + // The texturing and the fragment lighting registers. Therefore we upload them all in one go to avoid multiple slow uniform updates + glUniform1uiv(ubershaderData.picaRegLoc, 0x200 - 0x48, ®s[0x48]); + setupUbershaderTexEnv(); + } + + return usingAcceleratedShader; +} + void RendererGL::screenshot(const std::string& name) { constexpr uint width = 400; constexpr uint height = 2 * 240; @@ -974,7 +1078,7 @@ void RendererGL::screenshot(const std::string& name) { // Flip the image vertically for (int y = 0; y < height; y++) { - memcpy(&flippedPixels[y * width * 4], &pixels[(height - y - 1) * width * 4], width * 4); + std::memcpy(&flippedPixels[y * width * 4], &pixels[(height - y - 1) * width * 4], width * 4); // Swap R and B channels for (int x = 0; x < width; x++) { std::swap(flippedPixels[y * width * 4 + x * 4 + 0], flippedPixels[y * width * 4 + x * 4 + 2]); @@ -986,21 +1090,12 @@ void RendererGL::screenshot(const std::string& name) { stbi_write_png(name.c_str(), width, height, 4, flippedPixels.data(), 0); } -void RendererGL::clearShaderCache() { - for (auto& shader : shaderCache) { - CachedProgram& cachedProgram = shader.second; - cachedProgram.program.free(); - } - - shaderCache.clear(); -} - void RendererGL::deinitGraphicsContext() { // Invalidate all surface caches since they'll no longer be valid textureCache.reset(); depthBufferCache.reset(); colourBufferCache.reset(); - clearShaderCache(); + shaderCache.clear(); // All other GL objects should be invalidated automatically and be recreated by the next call to initGraphicsContext // TODO: Make it so that depth and colour buffers get written back to 3DS memory @@ -1049,3 +1144,92 @@ void RendererGL::initUbershader(OpenGL::Program& program) { glUniform1i(OpenGL::uniformLocation(program, "u_tex2"), 2); glUniform1i(OpenGL::uniformLocation(program, "u_tex_luts"), 3); } + +void RendererGL::accelerateVertexUpload(ShaderUnit& shaderUnit, PICA::DrawAcceleration* accel) { + u32 buffer = 0; // Vertex buffer index for non-fixed attributes + u32 attrCount = 0; + + const u32 totalAttribCount = accel->totalAttribCount; + + static constexpr GLenum attributeFormats[4] = { + GL_BYTE, // 0: Signed byte + GL_UNSIGNED_BYTE, // 1: Unsigned byte + GL_SHORT, // 2: Short + GL_FLOAT, // 3: Float + }; + + const u32 vertexCount = accel->maximumIndex - accel->minimumIndex + 1; + + // Update index buffer if necessary + if (accel->indexed) { + usingShortIndices = accel->useShortIndices; + const usize indexBufferSize = regs[PICA::InternalRegs::VertexCountReg] * (usingShortIndices ? sizeof(u16) : sizeof(u8)); + + hwIndexBuffer->Bind(); + auto indexBufferRes = hwIndexBuffer->Map(4, indexBufferSize); + hwIndexBufferOffset = reinterpret_cast(usize(indexBufferRes.buffer_offset)); + + std::memcpy(indexBufferRes.pointer, accel->indexBuffer, indexBufferSize); + hwIndexBuffer->Unmap(indexBufferSize); + } + + hwVertexBuffer->Bind(); + auto vertexBufferRes = hwVertexBuffer->Map(4, accel->vertexDataSize); + u8* vertexData = static_cast(vertexBufferRes.pointer); + const u32 vertexBufferOffset = vertexBufferRes.buffer_offset; + + gl.bindVAO(hwShaderVAO); + + // Enable or disable vertex attributes as needed + const u32 currentAttributeMask = accel->enabledAttributeMask; + // Use bitwise xor to calculate which attributes changed + u32 attributeMaskDiff = currentAttributeMask ^ previousAttributeMask; + + while (attributeMaskDiff != 0) { + // Get index of next different attribute and turn it off + const u32 index = 31 - std::countl_zero(attributeMaskDiff); + const u32 mask = 1u << index; + attributeMaskDiff ^= mask; + + if ((currentAttributeMask & mask) != 0) { + // Attribute was disabled and is now enabled + hwShaderVAO.enableAttribute(index); + } else { + // Attribute was enabled and is now disabled + hwShaderVAO.disableAttribute(index); + } + } + + previousAttributeMask = currentAttributeMask; + + // Upload the data for each (enabled) attribute loader into our vertex buffer + for (int i = 0; i < accel->totalLoaderCount; i++) { + auto& loader = accel->loaders[i]; + + std::memcpy(vertexData, loader.data, loader.size); + vertexData += loader.size; + } + + hwVertexBuffer->Unmap(accel->vertexDataSize); + + // Iterate over the 16 PICA input registers and configure how they should be fetched. + for (int i = 0; i < 16; i++) { + const auto& attrib = accel->attributeInfo[i]; + const u32 attributeMask = 1u << i; + + if (accel->fixedAttributes & attributeMask) { + auto& attrValue = fixedAttrValues[i]; + // This is a fixed attribute, so set its fixed value, but only if it actually needs to be updated + if (attrValue[0] != attrib.fixedValue[0] || attrValue[1] != attrib.fixedValue[1] || attrValue[2] != attrib.fixedValue[2] || + attrValue[3] != attrib.fixedValue[3]) { + std::memcpy(attrValue.data(), attrib.fixedValue.data(), sizeof(attrib.fixedValue)); + glVertexAttrib4f(i, attrib.fixedValue[0], attrib.fixedValue[1], attrib.fixedValue[2], attrib.fixedValue[3]); + } + } else if (accel->enabledAttributeMask & attributeMask) { + glVertexAttribPointer( + i, attrib.componentCount, attributeFormats[attrib.type], GL_FALSE, attrib.stride, + reinterpret_cast(vertexBufferOffset + attrib.offset) + ); + } + } +} \ No newline at end of file diff --git a/src/libretro_core.cpp b/src/libretro_core.cpp index 3f92cddd..21a62f23 100644 --- a/src/libretro_core.cpp +++ b/src/libretro_core.cpp @@ -163,8 +163,9 @@ static int fetchVariableRange(std::string key, int min, int max) { static void configInit() { static const retro_variable values[] = { - {"panda3ds_use_shader_jit", EmulatorConfig::shaderJitDefault ? "Enable shader JIT; enabled|disabled" - : "Enable shader JIT; disabled|enabled"}, + {"panda3ds_use_shader_jit", EmulatorConfig::shaderJitDefault ? "Enable shader JIT; enabled|disabled" : "Enable shader JIT; disabled|enabled"}, + {"panda3ds_accelerate_shaders", + EmulatorConfig::accelerateShadersDefault ? "Run 3DS shaders on the GPU; enabled|disabled" : "Run 3DS shaders on the GPU; disabled|enabled"}, {"panda3ds_accurate_shader_mul", "Enable accurate shader multiplication; disabled|enabled"}, {"panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault ? "Use ubershaders (No stutter, maybe slower); enabled|disabled" : "Use ubershaders (No stutter, maybe slower); disabled|enabled"}, @@ -197,6 +198,8 @@ static void configUpdate() { config.sdWriteProtected = fetchVariableBool("panda3ds_write_protect_virtual_sd", false); config.accurateShaderMul = fetchVariableBool("panda3ds_accurate_shader_mul", false); config.useUbershaders = fetchVariableBool("panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault); + config.accelerateShaders = fetchVariableBool("panda3ds_accelerate_shaders", EmulatorConfig::accelerateShadersDefault); + config.forceShadergenForLights = fetchVariableBool("panda3ds_ubershader_lighting_override", true); config.lightShadergenThreshold = fetchVariableRange("panda3ds_ubershader_lighting_override_threshold", 1, 8); config.discordRpcEnabled = false; diff --git a/third_party/duckstation/gl/stream_buffer.cpp b/third_party/duckstation/gl/stream_buffer.cpp new file mode 100644 index 00000000..b7a40603 --- /dev/null +++ b/third_party/duckstation/gl/stream_buffer.cpp @@ -0,0 +1,288 @@ +// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin +// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) + +#include "gl/stream_buffer.h" + +#include +#include + +#include "align.hpp" + +OpenGLStreamBuffer::OpenGLStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : m_target(target), m_buffer_id(buffer_id), m_size(size) {} +OpenGLStreamBuffer::~OpenGLStreamBuffer() { glDeleteBuffers(1, &m_buffer_id); } + +void OpenGLStreamBuffer::Bind() { glBindBuffer(m_target, m_buffer_id); } +void OpenGLStreamBuffer::Unbind() { glBindBuffer(m_target, 0); } + +void OpenGLStreamBuffer::SetDebugName(std::string_view name) { +#ifdef GPU_DEBUG_INFO + if (glObjectLabel) { + glObjectLabel(GL_BUFFER, GetGLBufferId(), static_cast(name.length()), static_cast(name.data())); + } +#endif +} + +namespace { + // Uses glBufferSubData() to update. Preferred for drivers which don't support {ARB,EXT}_buffer_storage. + class BufferSubDataStreamBuffer final : public OpenGLStreamBuffer { + public: + ~BufferSubDataStreamBuffer() override { Common::alignedFree(m_cpu_buffer); } + + MappingResult Map(u32 alignment, u32 min_size) override { return MappingResult{static_cast(m_cpu_buffer), 0, 0, m_size / alignment}; } + + u32 Unmap(u32 used_size) override { + if (used_size == 0) return 0; + + glBindBuffer(m_target, m_buffer_id); + glBufferSubData(m_target, 0, used_size, m_cpu_buffer); + return 0; + } + + u32 GetChunkSize() const override { return m_size; } + + static std::unique_ptr Create(GLenum target, u32 size) { + glGetError(); + + GLuint buffer_id; + glGenBuffers(1, &buffer_id); + glBindBuffer(target, buffer_id); + glBufferData(target, size, nullptr, GL_STREAM_DRAW); + + GLenum err = glGetError(); + if (err != GL_NO_ERROR) { + glBindBuffer(target, 0); + glDeleteBuffers(1, &buffer_id); + return {}; + } + + return std::unique_ptr(new BufferSubDataStreamBuffer(target, buffer_id, size)); + } + + private: + BufferSubDataStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : OpenGLStreamBuffer(target, buffer_id, size) { + m_cpu_buffer = static_cast(Common::alignedMalloc(size, 32)); + if (!m_cpu_buffer) Panic("Failed to allocate CPU storage for GL buffer"); + } + + u8* m_cpu_buffer; + }; + + // Uses BufferData() to orphan the buffer after every update. Used on Mali where BufferSubData forces a sync. + class BufferDataStreamBuffer final : public OpenGLStreamBuffer { + public: + ~BufferDataStreamBuffer() override { Common::alignedFree(m_cpu_buffer); } + + MappingResult Map(u32 alignment, u32 min_size) override { return MappingResult{static_cast(m_cpu_buffer), 0, 0, m_size / alignment}; } + + u32 Unmap(u32 used_size) override { + if (used_size == 0) return 0; + + glBindBuffer(m_target, m_buffer_id); + glBufferData(m_target, used_size, m_cpu_buffer, GL_STREAM_DRAW); + return 0; + } + + u32 GetChunkSize() const override { return m_size; } + + static std::unique_ptr Create(GLenum target, u32 size) { + glGetError(); + + GLuint buffer_id; + glGenBuffers(1, &buffer_id); + glBindBuffer(target, buffer_id); + glBufferData(target, size, nullptr, GL_STREAM_DRAW); + + GLenum err = glGetError(); + if (err != GL_NO_ERROR) { + glBindBuffer(target, 0); + glDeleteBuffers(1, &buffer_id); + return {}; + } + + return std::unique_ptr(new BufferDataStreamBuffer(target, buffer_id, size)); + } + + private: + BufferDataStreamBuffer(GLenum target, GLuint buffer_id, u32 size) : OpenGLStreamBuffer(target, buffer_id, size) { + m_cpu_buffer = static_cast(Common::alignedMalloc(size, 32)); + if (!m_cpu_buffer) Panic("Failed to allocate CPU storage for GL buffer"); + } + + u8* m_cpu_buffer; + }; + + // Base class for implementations which require syncing. + class SyncingStreamBuffer : public OpenGLStreamBuffer { + public: + enum : u32 { NUM_SYNC_POINTS = 16 }; + + virtual ~SyncingStreamBuffer() override { + for (u32 i = m_available_block_index; i <= m_used_block_index; i++) { + glDeleteSync(m_sync_objects[i]); + } + } + + protected: + SyncingStreamBuffer(GLenum target, GLuint buffer_id, u32 size) + : OpenGLStreamBuffer(target, buffer_id, size), m_bytes_per_block((size + (NUM_SYNC_POINTS)-1) / NUM_SYNC_POINTS) {} + + ALWAYS_INLINE u32 GetSyncIndexForOffset(u32 offset) { return offset / m_bytes_per_block; } + + ALWAYS_INLINE void AddSyncsForOffset(u32 offset) { + const u32 end = GetSyncIndexForOffset(offset); + for (; m_used_block_index < end; m_used_block_index++) { + if (m_sync_objects[m_used_block_index]) { + Helpers::warn("GL stream buffer: Fence slot we're trying to insert is already in use"); + } + + m_sync_objects[m_used_block_index] = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); + } + } + + ALWAYS_INLINE void WaitForSync(GLsync& sync) { + glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, GL_TIMEOUT_IGNORED); + glDeleteSync(sync); + sync = nullptr; + } + + ALWAYS_INLINE void EnsureSyncsWaitedForOffset(u32 offset) { + const u32 end = std::min(GetSyncIndexForOffset(offset) + 1, NUM_SYNC_POINTS); + for (; m_available_block_index < end; m_available_block_index++) { + if (!m_sync_objects[m_available_block_index]) [[unlikely]] { + Helpers::warn("GL stream buffer: Fence slot we're trying to wait on is not in use"); + } + + WaitForSync(m_sync_objects[m_available_block_index]); + } + } + + void AllocateSpace(u32 size) { + // add sync objects for writes since the last allocation + AddSyncsForOffset(m_position); + + // wait for sync objects for the space we want to use + EnsureSyncsWaitedForOffset(m_position + size); + + // wrap-around? + if ((m_position + size) > m_size) { + // current position ... buffer end + AddSyncsForOffset(m_size); + + // rewind, and try again + m_position = 0; + + // wait for the sync at the start of the buffer + WaitForSync(m_sync_objects[0]); + m_available_block_index = 1; + + // and however much more we need to satisfy the allocation + EnsureSyncsWaitedForOffset(size); + m_used_block_index = 0; + } + } + + u32 GetChunkSize() const override { return m_size / NUM_SYNC_POINTS; } + + u32 m_position = 0; + u32 m_used_block_index = 0; + u32 m_available_block_index = NUM_SYNC_POINTS; + u32 m_bytes_per_block; + std::array m_sync_objects{}; + }; + + class BufferStorageStreamBuffer : public SyncingStreamBuffer { + public: + ~BufferStorageStreamBuffer() override { + glBindBuffer(m_target, m_buffer_id); + glUnmapBuffer(m_target); + glBindBuffer(m_target, 0); + } + + MappingResult Map(u32 alignment, u32 min_size) override { + if (m_position > 0) m_position = Common::alignUp(m_position, alignment); + + AllocateSpace(min_size); + if ((m_position + min_size) > (m_available_block_index * m_bytes_per_block)) [[unlikely]] { + Helpers::panic("GL stream buffer: Invalid size passed to Unmap"); + } + + const u32 free_space_in_block = ((m_available_block_index * m_bytes_per_block) - m_position); + return MappingResult{static_cast(m_mapped_ptr + m_position), m_position, m_position / alignment, free_space_in_block / alignment}; + } + + u32 Unmap(u32 used_size) override { + if ((m_position + used_size) > m_size) [[unlikely]] { + Helpers::panic("GL stream buffer: Invalid size passed to Unmap"); + } + + if (!m_coherent) { + if (GLAD_GL_VERSION_4_5 || GLAD_GL_ARB_direct_state_access) { + glFlushMappedNamedBufferRange(m_buffer_id, m_position, used_size); + } else { + Bind(); + glFlushMappedBufferRange(m_target, m_position, used_size); + } + } + + const u32 prev_position = m_position; + m_position += used_size; + return prev_position; + } + + static std::unique_ptr Create(GLenum target, u32 size, bool coherent = true) { + glGetError(); + + GLuint buffer_id; + glGenBuffers(1, &buffer_id); + glBindBuffer(target, buffer_id); + + const u32 flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | (coherent ? GL_MAP_COHERENT_BIT : 0); + const u32 map_flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | (coherent ? 0 : GL_MAP_FLUSH_EXPLICIT_BIT); + if (GLAD_GL_VERSION_4_4 || GLAD_GL_ARB_buffer_storage) + glBufferStorage(target, size, nullptr, flags); + else if (GLAD_GL_EXT_buffer_storage) + glBufferStorageEXT(target, size, nullptr, flags); + + GLenum err = glGetError(); + if (err != GL_NO_ERROR) { + glBindBuffer(target, 0); + glDeleteBuffers(1, &buffer_id); + return {}; + } + + u8* mapped_ptr = static_cast(glMapBufferRange(target, 0, size, map_flags)); + AssertMsg(mapped_ptr, "Persistent buffer was mapped"); + + return std::unique_ptr(new BufferStorageStreamBuffer(target, buffer_id, size, mapped_ptr, coherent)); + } + + private: + BufferStorageStreamBuffer(GLenum target, GLuint buffer_id, u32 size, u8* mapped_ptr, bool coherent) + : SyncingStreamBuffer(target, buffer_id, size), m_mapped_ptr(mapped_ptr), m_coherent(coherent) {} + + u8* m_mapped_ptr; + bool m_coherent; + }; + +} // namespace + +std::unique_ptr OpenGLStreamBuffer::Create(GLenum target, u32 size) { + std::unique_ptr buf; + if (GLAD_GL_VERSION_4_4 || GLAD_GL_ARB_buffer_storage || GLAD_GL_EXT_buffer_storage) { + buf = BufferStorageStreamBuffer::Create(target, size); + if (buf) return buf; + } + + // BufferSubData is slower on all drivers except NVIDIA... +#if 0 + const char* vendor = reinterpret_cast(glGetString(GL_VENDOR)); + if (std::strcmp(vendor, "ARM") == 0 || std::strcmp(vendor, "Qualcomm") == 0) { + // Mali and Adreno drivers can't do sub-buffer tracking... + return BufferDataStreamBuffer::Create(target, size); + } + + return BufferSubDataStreamBuffer::Create(target, size); +#else + return BufferDataStreamBuffer::Create(target, size); +#endif +} \ No newline at end of file diff --git a/third_party/duckstation/gl/stream_buffer.h b/third_party/duckstation/gl/stream_buffer.h new file mode 100644 index 00000000..6b3562e7 --- /dev/null +++ b/third_party/duckstation/gl/stream_buffer.h @@ -0,0 +1,53 @@ +// SPDX-FileCopyrightText: 2019-2023 Connor McLaughlin +// SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) + +#pragma once + +#include +// Comment to avoid clang-format reordering the glad header + +#include +#include +#include +#include + +#include "duckstation_compat.h" +#include "helpers.hpp" + +class OpenGLStreamBuffer { + public: + virtual ~OpenGLStreamBuffer(); + + ALWAYS_INLINE GLuint GetGLBufferId() const { return m_buffer_id; } + ALWAYS_INLINE GLenum GetGLTarget() const { return m_target; } + ALWAYS_INLINE u32 GetSize() const { return m_size; } + + void Bind(); + void Unbind(); + + void SetDebugName(std::string_view name); + + struct MappingResult { + void* pointer; + u32 buffer_offset; + u32 index_aligned; // offset / alignment, suitable for base vertex + u32 space_aligned; // remaining space / alignment + }; + + virtual MappingResult Map(u32 alignment, u32 min_size) = 0; + + /// Returns the position in the buffer *before* the start of used_size. + virtual u32 Unmap(u32 used_size) = 0; + + /// Returns the minimum granularity of blocks which sync objects will be created around. + virtual u32 GetChunkSize() const = 0; + + static std::unique_ptr Create(GLenum target, u32 size); + + protected: + OpenGLStreamBuffer(GLenum target, GLuint buffer_id, u32 size); + + GLenum m_target; + GLuint m_buffer_id; + u32 m_size; +}; \ No newline at end of file diff --git a/third_party/fmt b/third_party/fmt new file mode 160000 index 00000000..f8581bce --- /dev/null +++ b/third_party/fmt @@ -0,0 +1 @@ +Subproject commit f8581bcecf317e8753887b68187c9ef1ba0524f4 From 89d129211e6cbdd96e3ca78d830150ae92fd8d85 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 19 Oct 2024 17:23:54 +0300 Subject: [PATCH 07/20] HLE DSP: Add AAC decoder toggle for enabling/disabling AAC decoding (#611) * HLE DSP: Add AAC decoder toggle * Fix derp --- src/core/audio/hle_core.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/core/audio/hle_core.cpp b/src/core/audio/hle_core.cpp index a616f317..70a8e71d 100644 --- a/src/core/audio/hle_core.cpp +++ b/src/core/audio/hle_core.cpp @@ -632,7 +632,7 @@ namespace Audio { AAC::Message response; switch (request.command) { - case AAC::Command::EncodeDecode: + case AAC::Command::EncodeDecode: { // Dummy response to stop games from hanging response.resultCode = AAC::ResultCode::Success; response.decodeResponse.channelCount = 2; @@ -643,10 +643,13 @@ namespace Audio { response.command = request.command; response.mode = request.mode; - // We've already got an AAC decoder but it's currently disabled until mixing & output is properly implemented - // TODO: Uncomment this when the time comes - // aacDecoder->decode(response, request, [this](u32 paddr) { return getPointerPhys(paddr); }); + // TODO: Make this a toggle in config.toml. Currently we have it off by default until we finish the DSP mixer. + constexpr bool enableAAC = false; + if (enableAAC) { + aacDecoder->decode(response, request, [this](u32 paddr) { return getPointerPhys(paddr); }); + } break; + } case AAC::Command::Init: case AAC::Command::Shutdown: From c97a174cd12dd77180a63f7d86d10a7c2e5df806 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 19 Oct 2024 18:16:33 +0300 Subject: [PATCH 08/20] Silence invalid offsetof warning --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fe72f3b6..641a0055 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,7 +26,7 @@ if(APPLE) endif() if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-nonliteral -Wno-format-security") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-format-nonliteral -Wno-format-security -Wno-invalid-offsetof") endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") From af1fe1399617b6209faaa9164bda277032640d99 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Oct 2024 16:41:41 +0300 Subject: [PATCH 09/20] Make Android builds official & update readme (#612) --- docs/img/KirbyAndroid.png | Bin 0 -> 580748 bytes readme.md | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 docs/img/KirbyAndroid.png diff --git a/docs/img/KirbyAndroid.png b/docs/img/KirbyAndroid.png new file mode 100644 index 0000000000000000000000000000000000000000..05e8b466b2a9bca97911662191c7771e27857475 GIT binary patch literal 580748 zcmZs?1yGyY`aK+6i@UoQFBGQ~cP(xOiWQeYi&M0?I}~?!3+_$}E$&hZ2_7JXk8|%i z=l;H#|1*=xyqU}-+56pVJ!`EeQJU%sFEA-E0RX@YB}G|n000#U06-K*M}2;!^_bK7 z`3b>8TR{d;J41E+e1UBHM(qs%&=8LWvqX8m#&A_M^Z)>;BmR0I#P6Tm002)VO0sWs zea!wmDl}RDN~4LaVKg-%=4ad|EWwga96_Dq^-OkB3;Ka#;GxM#fy!hl=sxsDC&O(f z@QWahogl@B`c|R(dFi6cyvkd%0~K=7oe^U0xV_sN|Fnl*nzI0gfy;wf$_`MZSKEed z)voPnOKT*2XZEQv702r{%hSF2lVjAbK~||2sNaI_^3J4?O&civ|E#`inYB!W|964e zLip+apS49jsxpfFSQU6(ccn}2X@ zcW?cZBp@p`ZCmYo*nF`9myMzKnc~Sp!D~VCnRbk+kp)KemoL{${h-8lxSbVm4Z}NZ zdAsv~aMQe3`N4pZqNnb1i-A}vuT{k#%_}UP0{Kmz)hyc=JqDoOo3Gj3O+EC5zP7#s z#ZD`~Hn80m3^(v>G@VYv%l~j8qz5zoatku&zYj3q@G|j!g3YboHqMXcn~1JdH&rW` zKY>m`xaqMy9uOUiy5H#CS__KQZQ8?vx#p5o1uyyq^lFN?`jgNDvx&NCpf$>Sw_rW@ zi=B#;jER$EN zzTRzezEXW~(k5lcwtvaH+chuxWs*mgGllnl5ZS@zZQY!!a1 zeRczTvj+`yYN}PwiGcjn&XUtAANNzV&*GR@f4ZwS8Y)pTkX+$8A`IECk{!C1gO6TE zBb5@K-5tHHQAn5CJjT34ytpJE*`ZUhk(#yP(Xf^pZhy-na?d3bNPPKDevq-4dVG-e z@S-h0kkLHgQg)`4tlN#7aLWANV&8_`K!Nc-*P1Jk+a4v0DQVYVlmpdWjAk;IDg9|$ z>dE#ZAO4GWOyd>@g6hY~dYG@0w3BN$yMOhk!msB^|7)w!cdXLQ@Krpud=>wT&lfyT zcOZP<@Ei6(#7$I}-;7Z^QM=%I8Xr^MI9$9&G~6kXBtp#>H;dPA|GBsOZjnak12lN$ zy$KC-^q>JQRB_{b0~?w0t7{fbmYquDovuY+SXk;Z(mba+hTj-L7uBBx5ifB{4c4>T zRBYW8PcA?>M0o!#NT=o-Ut4oDOjh=Un0`kxo>Z2^VmBu8sog^j=1Rv7w{{-dwJuJe z^Jdz)Yq5A{Gxbvhnygw?437af0KWI)O({`v)`(&w?pZ2AKa>4ln|ybq{B>D9^O5sJDzxPXp6^Ddmx|=w9^u`f6zr|Y z&}TlyiuxgFn)YtJ1SRzY=_2Ky%rCK4m#bH>pnvKl80;A?!*b4F&f|im(YNQmQ})G> z7UhZ~2W?SV0EMxNC8_;&-0RHZY(wUHvG6v+8LJUHY+iEsmjS=#tj@02Gp9RRbNK^m zUHkiyzKfeMJ7IUXc2^d;0H&4LDJRS9$UCr1^(^snf%ZGpkdvc6f#R#L+Wk=YZb zaJ6a~Qe$VIVyd1z5QNEdH_l0}8yAxDyM6 zv0mW9lba?~&13B0 zj1jf(5nlFY`C~&XLnx(fJ9*+R1D~YuKdigYx)<$yt6})-)ft2Tw42-=L#U%rn*S54? z^M*oc$0PH>FlZ6(zQz+Iey^vi%{LNH9%jNJK~O0}Lp91=ZqR(^&_!w3Wo(|sA2I>Z z{uey12a<~5I9md7Cu14oYR%l!CkeZm_DQ_wNVe6oVgv1!<`^ySw1uZ zRM`Cj^i8c?KD~H5K?=nQI;ntS3N8h;D3%-(;^|Nw4$W^YPpKw+H7vvkshuCw0qbWo z2nxS9YZlB{zu%x#r-yloH)t59IhBadwh{QQJ2jtWO7?Jbnd<;F>zy$XCX-JcPP;iX zLgz*83}5FYnG88V0k)j&E>AGy^NJ4=)LFwLq|vc`^0@V4vN_)(Q4y=N?bp&;Mi_#|Hm+vnYw&L2gKk13M{xZ1eI~o7dnQf;B z?N;_TxK+)+?|Yp+@m|I`X_zlV^S-e!DY<=2(J}bY%@!jSVd54z5riKth*~5$@m>$T ze(F{9t4#fi_x#Degev&91p8J|5f22xJM#t$^Syfy5ex6R>tol3hO}Z}N=kX`C7~v% zrd+s_108ZP!qKBv!*PVmsFLe$&ewF+g9VcNe0`{#q@dbDYXb8@=>CgmOw?eXpT{SF>LVR-riO z6Ei!Gu`6J*%ja^qbY*Ik#rL7cUX@`MM~VZH#7}&p)Va(xvdf35)B`4YY12V1687a% z;NgRVH-mWtgymnV=(Ot(b&a3{qC)|WD9%_g+-^O5y3|_N4He@KuY~dVGwN|#*ioFH zt5~YBRU$nDqasQH5=3rIZ=5lNt?w0mso3SF#Mk#vEQLQonqht7l_eov+KZ9fx|l?C zLlIwn>8vepi4o*`Wwsg{;#hCSNe^m^Y*wqwynK6cuKST6S*}=rIRnm2AjAl1`R2Wo zLFNt@FsiRq5#Ha4PRV61B7vyI{IVhuhH;JWuk>nia%cC>n@BHCi)=5hiw-YfAGsHW z5=G@-?+7Y!}8Ht46P>`;g8l% zL6)ZYY!N{D7YPO0ABJT=T#In*pJCHgOFRY?*(<-KpIbB1yG=;-H%B@^XF1m;`>~4H{n**Jrn{YJs2F8O8}Sf44_-cYN^v_BWZ( zQcytXNIQbax~VYyNNwU@LcevUV*8oV=ryLxxjXVC<2uLgE8G&0+cF@XjmheAAcb4> zqE@W7{1S@Abbm3XO#!i~M3+8zi2~~pPS(J$&# zxzvY*EFS8e+N}y1X(ER2(80W9rBP-drgq<6$GwPK`4E01bGU?tBen+9yzP^y$-IJ`i&H1T2UfmhndasXGpnb@ z9p)v0u){l9vOy5H>gh40aFwx;r>8k%+693%Y*jP-Zp=AyVurw#{D=~yAKSZm8x&ME zR0|ufJ@S|O)N7s|djfw*3Z-Q*!ldah6A^n7+8gWJQnSJ3(q5R7{ZQs^C6x?%P>@Ol z-Lle-=Q1XKEL4&u4Qn>Z=-2smxMkD79K3R%n&rb_BPcf}8%;tq+aG@p%~#GV)98=* zUVlljEfXEyg;0*2QDG=6E@T(yNeAO}qm7FxFc$W}oTC%J0>9Q>EJh$QQX@qwyiDUvPc3(tB&ypiSa0&6`%C zkipnU)4Q_j4M}*%K>qA|<9R{)Mhs}SVFSd8Ciul7|6qJqNQafBIMsv&Z-VuO?8UYLLCUTlf4U2;L^=DW^Y*oMyr=M43uOPa^5^-Z-;4-kL&UL{YL|j4$2Sv(RZ6PVa`DTn#$# z5SC)7R(ounp3te#2+)AzKEXi5A|nS$?z-Si`K{$C=oe;WwOfV>&YdlC6(E?8Uddw#UF+ans|8X&+ zCU&VQRoncnf)H_)U0O^Z7Fsdvu@gCq5RcV$ziYU)&zIRJt2dZQO1?j%u?x9V4eb`^ zm&!86xckU>_U@-TDJxl>#z#g+E89Q`qx8ch#Q)ZY1Z0ec6=oiCi}EuUp@?hwYtU|E zN_*ZUU9ELa$^bJF(OU(?z|2t6o!^IuXB2rH-1^Cm->Tx)CIV?L7Eb|+Iffw`+JxI{ z_?n|NOFRC`OCFa~Bll4!#iEMzF-T0H544HA`XZQM>1bn?k zQ!n`k$S5piKk(|rh&0RT+wQ00Gf<`a!Erq6+jv4P;~WasUJ<{Kwe~>;W6rGu>{QMK z4{{Mg8m4m*UX@2%zRxl4GG3)L1l^r(5AL8K|6L|L-Fg!MDoKOS5ZhIH%=I|aHv{wt7@1VrxcJs)v}UF5^SB7xpYRng-MUu#17HGOB{H_ zKKIe$J-|dSqs?${CwI2&wlGLVab;z1yJ}S?XUYB$NWH^6+=T}(%9*_3<(HCD<&iua zTU+twRa#0rIP999jX#+>{hNOw&N3*cTP0LfpD~wEO(=Y@6KH%FmiTx45q4GMMk=s( zlN!|^=mNzB1O>7TtPmoIJ#tt#@da}#R;3LMDgWDUU)}OK(9xGCU1Uu|%~sxPS}>O8 zkKi+k@{8jyYU9r$bSfxK?cU~~hHWk;1`D>Fy?SkIm%BTw?XvSNK_s$V% zmp5RT(RJzjc$sMfyM`D=WYv=%c@Y0^EpbEc-H&u{p)Znjclz_Dsuc6YrIPDt#nWAA zXeN`b%COm(2isBIybG%mA}M^+si#SS2+&((Xh5(1-stw(sg`5{!k;4X^vCl&s?*bL zQ>BDJW~ES}q1PqvrC*yd0`*bjyBrwK3JjMrEkFiR4Y*uWJ9qxJAO1Z?*ZoN+0azBQ z2iXLvfVi#FdK%wOVwk!e_#M1y0ed%^%4V7rId3Hq^EOk+hyz(y1P|!Okf1{{7q5(P zJ^C?qHPVaIZQwH?CqcY_D0Se5O4T{kI*@PGPPaZP+_&1%K%o+#1|fgsG__d=w3UwiXeFE(l@ zFV1_6-N8$}F-b06^R)cKQ$>j_HWxFF0&b_Z<%-iZd>FW&AT}%DQ+=Wc3;vA1=0_CeMug%*M0( zcf~38#7aNhg#j#Rifc#(=Sm2G(?Py*10*|y$G z$%zuz12GXW=eEmafC){E*rk{!mSrF<9NZ-EvI==#SD4S}PoW*zfp@ld&EqaV@=tFn zhlChRA*kwXP@{@T0>|Db4Y3W-`qkPsK zJA<3Bbd*{%@Z3>gcjhgVcz zw!mRuJ^S)cxDj|~x{-Z^l4n7mn9L=7Sa9<+_C9VX=f=pQqFMa8tMOhtY7s zBJcK%@bW zCbA>F8|Ce{L|%&3Cznt91SpuKI_L&Vs9MW2yS+e4s}~@p}sS zer)-Eer!M&9OhZF4uT35h*Av)Kox^-Yq_1V0LA>9GJ>_7To4B`+kK2fk8nY_{VjTV zAFW#oWH#zuqSi)@W;1RGsc3v670M6KVye_wu=KRApqe7LjhUX(t3 z$tHEk^;X=GF0-?ud8-z6BYQ+^8mmQ*9^hU?4My6@;O`qL+^@MlT?sDe5H&;k`=&*# zCFP!J-9RL3Iv%`TCF!M@Rb0=7Yyk2)uz;#ur=3Mx#B7Nr>kCPJ!bNX#HT}PF&DHM@ zsb~6Xj2Af9*0K`LdSZc?GxPTwqTVgmEOZK{s|7s#QT~Ti=$f}o`%3+NT+BB>obC_d zW3K4n%Cydm`NA$j_ANp8F2r(lY1dKFx!QrpCH&K3%s_TLy?q2A!dxw)de#S^v-uo2 znH_m4tcOEr`1UT}%WtleSEY&jPvzF-H$k-or<))5#&<7gNkpH#n@>;%d~1hx zgAJCBJvnCcrP3pCY2W+FX4^%(W0`NBQjIQW40)<{vEj3K)18!t&FG{5PWqqG`Jp5j_6^h0GT#JHy>K9hHlbF)yAr|)#*;?q^jBg`Pe|(_9tAC-?^7s(=D?^K| z6>H@bHmX+yzGdaEyLpsSb5=s4vCH`G?vWBgnW5+bmtD9}y=l^hZ_qv(NOpdHK1f%2 zRMfK29s>3QlS8mi(<79=_tH7ngK)Yer9<~zwLF+W=6H3UlGd~(LpO(~@EdUv?QiV9wik^| zX&DHa83;O)#D90-WhwZJ<%2n?x+SOsLn=m5Axdx-^Um#) z2K*TO$au#S0Fz3Mzi7bzO{lbB>#iNZlKjV5rb*{M&&(MT$4vYlwoqOaEaKeXPnOw~rtF@Y(9u>Z(pK8&JD7 zWnWYT2sFoc%8k&Zp9@ktLI%-c-l{>WCJ-^Bwo5g0y=C;_K)4`#w`m6F9?u>xzul*y zZ*yyrh##>87By@?&>EP9oYzzz+^EskW!=_pc_^+(=C0?dC3F5}Z!aV0OJS)SOg9Wj zo3XpgDPibC`w7C@VjSlY>smd|?%V6J6i-XOb$rn%8*W&OcrSQp_|!o~v!24Hw7>U} zK_j1f@@uj{CMj_qh0=8{WOFsj_1bg)17+jO*!ERAt5t^RlTi7Sq4pJdKU&W}0)K3V zH#;R8&ei#$+wb!J=hQ?vmSFSBd!@F9-C3VcnJ`}pU+RtToD?H^XNljiqIjtB0}GR5 zXJ*=6JqQZjGV(}6=uN=%M`wh*Qk%VeCiziO!IF+jy_>DB*(P&W1As)3He^|(tn87;!B=YCqQgvhxv1OPu#l_d0&N+16qf2pS4~(Yj|kDS zkzcaD{hK2+bZ>bUb^?=sz7Rc?!)b zTMZQUJIY3y)aN8YGL@|fjTOZX78e7X>SW3`2tdrEeNg>kd^%DU$G5M8o-hv?wmtzsd#A|1NheEZdp1%*3VSU@^56p z(%F&z7|`B7xZPX$8v8L`9!C2BwY8Vssp}L54Lh_q&hz%(__jFX#8Y)2(<#{iHawAU z*;H&?5+?C%rWX-1CW-tLCdRF~<26{^pT@C#-Q8IhG5zzfOQJp4SC}=Ny%_HTNPSPe zV7E7}HDA-q>d-Z9q?5+`eKee7Mvd~(!I9Hy6hEt4hsYKN>*mayyH9?;F*fj3`qEM% z6?dm9g|j`1^$(b}n-zSyTIsVj05V&ZFNY=G4=m4Xm%oswCSe6cWFxvl?a9_NT%nvv zCRD2GkWseLnDo7eyJq(8Sup>gh^3OicUCX&GOi$67A}mPf{6`hgz$Or&KG;q0Y=f^ z6N)y-_rox!#v^asxuHGHN4xNG)&B_iK0OOOVW?R;l!TN(IE={&L$WgMoGz^=acnzy z%oPwozcXC!5w#+cA+zD}_S`49&i7l0`UdG--}g&6ei>6m&les=FnYm2kef77j5b1n zayJgds605ptwe zNMIMhH#x+D+EmDFCn6QiB#9kC@ryaj2so6-_2!aZkjs6~M@$E&T~4AnMHwKggfHL4 zfmn#Vi_Z?_B19@B=>9Vt~+rSQx!0Q1+$s1^J>WB}Tm9pQy$2_(Q7Uvobk!6Cl6XIm(>6JO zAtX1Mjc~+c)hqhIJH$7f@kM@wk4eKGjBFI+^at(%%L>Wa%Ek(ydaP4i)(J+IItM|y`e<#8k+y?lJ;jUM;>w_+x12>1bP1Ag-`x= zwB}rX@sZZt?L7=gTTMf-%OSq_Gb|f$J8k6)+0&gls7Z0-);c3Xa8lkeB^e3iMmgxET^&}<|7+=%;+AT! zSkFa<07&~A^Dpmua3zy&T{g6B6il@+cs;}rxf522t(=C%KcWR)e|6L$ZB<77YU}nt z1%b=P&?Cgl;+e{~9>yibVEC3VW6kTph`}RnJRGz`TP+Gx%!mv+|L}8R+J`8bk$T5X zPU3*s*~VYN^C7@^kli3+P~x*v)dZ5%)a~1IzGLY;t|EoMIB{uuf4DK|JMJAL)sv-y z_+?r4thE?fgMagM&idM4Z&+@fF@ZX6_;9c2gE8BA-wX|DvqsJE{N15EC~$a0WwZNK zWd7NI=D(P|vr~VO6%CsN&7YAjo?=L9migOa=ApOj+Y-s8qUl21#nEMzMCIi~K}yWh z{JD>!%mB7ZJ-&ibv~le>(qTbbhHaI22AEA+*m{`tcIp`p(SVB- zqVL*vlV3fQzVHZMhm|{^ff_ZD`(}v{n~gI@ns|Te;RCwZ(Uj)LkT_xX20d$H1UZl<8z>~2I+@WrIk9giRb%TMb zdZ{%zYL3t2B;&igfBDLKa(&{;e68Wybosu?iiBkZwncK8)nI?io?mM1;AC*yOTS!( zzP@{0hs4il5f??-v;*DjA|WU4;SFM=K5m%&y;y6+eYpbNn(fCVW3JeSAXn_VI4j0Z z{eD~H|1;|o8h`_PIVk$UGj~%IdTu9tu^#TV-FrL;d);q<7q%czAs^h{Ar_KLNK9yA zuK2`aeb-HYzSC=ZBtt#Vk_9gONL|w!cHjS^@#ZGV;Lv3+f+rQZp3&SKgOHKK>V#=t zACqqCp8)Hhx|$N|wEtI4M~yC7(j2mx8G6C;ZSTBfx9B!l1AZPF}fCb@KH zit6{RL8DqK>husR`%#G3%$bs__x!UwR$wzG#>+zMQ6#r{w0JB;PBsixJ8F-9ECKN96s3u;JD~F%2Zsk^7`}cpwn=X!Bf9QL7mBY|SX=MsZz`pq? z`S)Eub43~mPyd=J^G|*lWMeq-uOx*#q59mIk?npYL}x4Vwp~Y0?Mwegq z+-fvkA^R}uHdwr#__b)GUY~lf22PXttUjUQZpID5VIBnAUH%LQ*Y4LV4jGw4r4XT} z`-Sx%@gIcS*i>qf-})Q3q78EKETej;Hl`h$Zpeo_ZNL2BGqbMt(X;XF-Ptb>zP+y3 zriP?8mJc4<;03Zf=hjW3lx6?kFBn#RKfby6okq7k-imES#FA}BI6=a6PwGz|7H=Qc zAK=ZCMVhsYji=LH0_~!`zu(ak{^2ejqVYE{DNCFNG}5P99m$+!)zwB;y1wm(ig=nO^hZ!)c|;) zWI)AuDOMHnwJ7k41__eP>`R^!i+Jd(r-IbmjSAM56K9DmbQwa!t(XY0djOn$4!rLZ ztv|~lt*3n{MR-qZjfN$5;xgbMbMi%Sl{bd^$!Q4Y-v;U$7z3(I6F;)yR*N$v4Fr+| z*T|Mghu%=`XU2phwa>>Lsc_4TU+VG**T%8(Z-^!IyJ~#U?#im7Ll6i6c_~*c-n00#_qZ zg6sikWPQF09$2%!=>I2O3_IcO^>czw)mrvny+<6;+v{{+EAk3(#Aw1*m?9j)z_8!O z9ie^M>lw<0qp05umL|Pem&q}!y^QDU--yjXyV%*QYHB)d=Xl!T@F!TO3gY^F_!K?V zYIZVvqi56#y5XFZ)fPTIP{3korc*iDF_xTBgWmk74*-+E!DphF?HdJ<1ev!tB^Z4E z{X1q$6E&g1em>xEKc8DgXX+Q$*dRe}=2%R>U3T4^5SOi71OZ-Lk3C+bw(YnVl~zA} z#qlC#0$0}O+0-GMu5Ho_r^o=13~>;MupqiJEPE)Bd#YxrtS{ZBYzOc|x}#t1`^+9S zBJzoCsRrt%Gp`g}?_0oawR3J{7Sjtfz8K!col{Iu_sQ57P_r>@mP~}TfxrGsf7;ez z%e=I@Uyp~ch4pX6B;$)zz|kSbVAP=54Z3u#yptZlRnbxI?=Y$xBJq8nCzb^qPu9M{ z!@~=7Prr8))f2@r3YF+~3>*mB)@R;$kPeIybRbE_)}}t78>gnVEb;k=I%&+AoPK>o zzD||}<0$e*@07~Qaul?4hL0khtG{UbTv}>Pv%3xw_<9G01XIiV{7azQr>&Gr}77-eQN{$^qn2P$91M7RipsmURPU~$IkxDNqkp#dH}Qz&d&Op zqKq*OpGHvsv?>4!f)uUW9iQdN>8$3u9ebB@;NyjtbHfW?n20!0Wpw=4oJa$UKLj0pMvB-cBYb zO=53)f9b19t>IpdrvR{vl%U(yO~bpjA*+M_zh>RX`M8rilghdKFVo04&w7J8bB|vy zyWu8J)H=&Lm{nQOw!8J3JZ>&a{cr2hEYdfrtNF_|gjPl60r(q7a{A{II9y#kJMdclo+}F;EY#ZtB7#nvds}EW9Twcj-Id=nB<1mYl z%%5@KpNIJCRjFuIf>CH(Sj%hqy)j9`qGnDA(-}AnGk+Uvjk;r6u{0q4jAwjVa_?g z%NT1}?t~fvD}+{+8B#vKrXQ4@$Qp1jUci)fI@dSOIT%NHpV%9FRib7L(p4V*t9EXiY;HEE~ zL$9H-xkVm}z4LVf0PK62TXXKMPWf_xA^{b^GdUh_%y43^weU zM1MKw_+diP%S!ELD?Kg756OFFhqckx-yml|Nl`sptpQ^!gt>FC(!8MgcZ#zHqVDE8 zl3_-C_dLKE*OhvBP$nA;BE0v|2kf^0_|2UIYfjAd06&OqcNFPKt>~zJjNzKqd*+8! z+ptd;;1{E`Kqg$p%P+KQFFf{(R@r&j)@*;7n7jy;VkL$nkKY!JdzW^^{She@ck?=( z05nR@7lrWVy8&_MaKHEjm{Tm>{U`GE13?16E^GCzzPP~$Eefg?C<>!wDJUphY@AZM zH|MKF#|zkG+VCZ|dMgJRunq0wzbO$^)?b5(n63#dD2CM?3lOf(bt=7YXk=t zg*=_v6+DmFDj*OmUpeA|%!&ox9CdRQb8Ul73n*We>tJmlT8Av?1s_*F&w*Mj#i8-H z{knc{If?srJq7XWI^yOa#2jMC*`3+*`GzJdyS}rb=H9|h2~|oXAGI&kuX*>S zed${8Z>UtM>Up{!Ju#w_;rQKgX1CA1DvhLAGAmE1yQpJvG-^^@9MfhI|CV$rg4Psc zh$up@CVnd~RJvne1Ve8_^(>FZ%!Jc17H zrCQ{a#HE%z$QU1d;p}yN7Y2zlY3E!#fYkbBu+7cpzcvu}DpQ=KM&*rdrpnD>{fqImlpAgK9%+doz9tf6@~Gkk_1Y5Zs+u0HoC4k>?XmR&!`-rDVZk5AlW z`rWFBsc*T(@k;V_MAWgTt@pke{Uz>SZeF{1HTuUyd>-AfvXGfuit;`dgFv&lz`-4OV(PmJxdbqMsG z61aAAJpK&6Jl2iN7f*fI^y9qbNb-H*K)}vu_Kq**^=dK`rLyd^ZNjITrw6QI$mVkI zLaO$Mc{f4>GH9Ix1l8JI5Ce_xT&%sC1)CR(2LKg&7R{`?8DgY9b#h_15r}@6k6nDT zw7X`)0H^rgM{bpcN*t-tj)HZF#)@_btcve|S3`=}8z!jbh@G0Z1<3O)Q`dD@gGQ zxG3s!f0zlzjxgzZA^8R+j!34mrC|2yvhwqwf9Yi00M+ahZ8v|SYRlgtK^_KDIsq!ZY@Rf^4cK(V!OsN&}#XC;G*l8Ap>(B0;A2*L#cLJ*hjZzX$ zNvy|}FPGQbAB67Krq>Hw*xm;i>Xg2w1}Py8$pcsUj(cst9DZ{AatLJ9!6q}5G7!tm zwbxQ6SB`Tp@Izk$A{C`YH|>k<>|C1K;f;Hz;|bMfr1$SUG-CvG{%cd71pjvym&)uP zEnT*T)AP?PF2NOd==FMd?>(v0!mp(w9)F#VA5z(K>2PsxLjCuIgrJw*N~jLCSOUpE ziOl3`Vc7#tAx_Tuk(H&#?|vRz_qbK<_+;R+ZsvS)3n^Va6>gfOtmVX3f!I z=2N#|yR^~I;uubms+kgHhlDO^pSUZz*w=LMR-q={hssJ0<_jdI7jHKgo&Aq*Ywlt- zaWJ!eL4dF+_CIaT>q*-iWM0x)KdAVQu?*8)qku7-gA=U_@u$fIzqsMxXM_04uX;i z+eezEHjGN5@~guau;EN`AE<5~Z9b;PqSA$Gz~|o+JIk5Y0lgOa;6~0v_f$!6g+c5| zavVnO4)_baS%9X$l{=z>=3GGb2?yExtW_?Ta)@(5R(*o}ckq45TXN#Wm>JHFRqXxI zhqk@PN6L%%>_9p-KMpxR^Mmnp{wT@O)r(lwtTHn2;lxR6PEkQ`%{u#>>Krwj@Wx}M zH|S~UR+4c=TN|+SSwB)_`+ozlYGd6Uj z-&F9nIr;x(%TRcNi*5dAKH#6lmSJ4u`-_9Uw=(o(lTG`g$Of8BY4xN z&rWhy`_v6AoQ44xifw*QHlvR!-aelCl3s4e>b`ybzyONF?v?lp-L@EDo6~KHSHd*; zL=QBXtFWow*rnmmKbn`RKfVp!tUZvFkVyRXk-n)K=L}Pk8Hun4h{#3pEqEQ{ zgWgZJ7USuGdi^AfXvWMNlUr2v%jOi(Xx7su0ul`!IB$ z>D?gd0Vd^km!YKj*q?WmV*GN0LeSYY`7aWaW%?){t{txpsB;*$_C;H$e+f8UOZ2-D zG^r|1>YX|F^ioe7e*RE15zVDRGHYpufl8_~#YvO+mN|N?y3&T9XU|hKne>p*H{cVC zhIvlAZ99;EUaN zF0c5=7xc<9lINxm8^oKte7KtQ54mZj)>L(bAZvQ0Gxs77?_*p)Rrq?jb$R~vxnPbp zmyP|zM;ddIn&-dn5v6o&y4eQk?;UpK)(Za&hmjb6zUWeFZ&`0i8CG2>?Q3gEd_ywX z4_7=}6G>SW#@&MiRn2sSCNlGJ6GhJFmja3J21zT2)1d?W?-ZTtte%SN^2=L#YoY4Kt|+t?oVV-n=Y#lTD*6 zdh^JZv$P(L9YH;UNYN4+i%mILZ$h?gr}^r!u^ZzT4*F*jUv6`Q^$1is`*ty6Io%L* z>TkJZ9|Abay{%C6BDyGfw#Lm4Ui>mbe~ZJ;Ut}QV;;3+R_(qq{(#1NRg3k3n8e&g8f!_o3WNTfL&vRww;duf6nHi`_nb68xB1 zpMVD~!#Dh4fJp~Tge-3GSEu?dH%pvL`kfa{U~aw{?Vp*#1JI3@m%!S3sw1Qr@gzzK zsKcO+EOpFUU}r_vlgAH zOTsu2P7HfU#^Y>y7F_qPxn&%Nnf{<*xqe>%PO@-}a`jG4A$4~P^Pv)BRt2smP97f8 z@5IIqtbF;kA0cf%%2^SU`h(}F1{pu{NoVJ4w<8^s`Ix^epirVO5?dV+=xZEc{U=%j z62Wp;!|v<3r-4deH_u<}jlO~gbS-q@=+Ev~I?E966J6~XtDyAxWQ_A3-kmZiJY@R$ z#48}Lr{ZqVGMGiFQnm1-X(9A|4ZWTlB-JSm;wfkd6 zJy}M>+{ajJ%v>n1p4Nn@yi{|usPesEsn<3WF(lMa>Y(B~I~`k`o+anXo3QQNt<=4^ zk6Pz{24*dy0oEYEDU+iy)@~et(mZXJN~BH zNyoY0mj-NXTX7CVgAe=bV`ax4YxB}3fI`3YpgNfch&WuZl3C8Y>}WS88qmybPo;+y zt=)_?nQNOAAI?t}UmW&e&7bO$FP>=b5AT4Tf_qbDLA^YOWvi}^+mx)qpqR*xkIJ~4o>r#4NX-9^j=P~VSRMFU4jW*P&yYBP8&f`3e_sQ3(z;K!B56Unl7eP|)=v^Sw2=aeZTOjrS zHy7u*ta|SqW82Zr_Ayx1YH;<&DK!KaSdBNtmFWNb1IpA;YctO2)5VDe`#t$w%f^wz z6s~iL!r3BYLl{{yy=+T5opO4Ca)(!p)Gt5b2V1@#nDg$9eBU1B!9Vwk(}__TE*yLQGgeBESYdRxxq_%TyuHs-gEchH(4uuWgHQ1m#Mv9 z5D;?A>fVQp2{u)P+77dOHDuQ+Tt8~+^n<^;t~y2)(9h(Df|R(asIT#UK7gW`>{5;I;KJ3`>ZOdo0R40h)fa{{`pwG)66Z#HKYAF5=;L$R#A#nk9!TGEt*Rnb@BzW8yO)0Hs6`;URM$YW3@{$>; zY)FTcTuiABUWX~EtVtOF^W@%o55=0r4}*tO{UwkdIIV-L2=#pY8Ve(bDBPejOuWF6 zVt*!n*!w@xuALk`4mSO-h`}GVBD>y7eytF@KEL&QH0ncd3+%I1Xsl(pt8TG|etpuz z;yU6}CrA&H;h(Xnh?Yrpuo&X{D!>}O#U+IAujYvd#g}8Ko74o7h=gN&1W$gbTTN$} z(N|V|2{DjU)dc7tv8@{5rO;=I5na3eRK$-qV@PPBhaeD5_B7YNiFCfKj|njag=GGt z216eP>3q4ZPLNMLonMll>odiQ(5@GKflL^fCO+Fct!=|pAy%baUn%ESQX347MKIdr ztr4D`^Ayg`@4U!@MQal-8mlE7+sxwy!F#@!V<|r=eotT|pPudk-N~2bi}rE-DBr|` zN6xQ5)MVZpwZ)S=W$xjvQpe?+`eMJz9lhz(;2^p|_M^-S*a}BdQ>Ekz#!AOYOo|Ll z`*PP8P2*H&m~W0WhaE$$%E$X0E6y9<-!B*2Xg@8r``52L|DCH?^Ec#t#kvd)*7M8+d@>oT6ZxpD-i?FGQypvfN$3FO0E+mvr;+)tIb zf7;0L-fz-@t%VVnqi}5V6e9d|8X^7*7vr{8e#=ttUJJHaUL$suZ({!Hu4nb1L1D#Q z1ZtZ3j4ur;^6F|Vwhw+0%X@8mHLm>cL81d}H>X5X0cfXrYp_w1r4cWLpHi9Dph)z? zc*vj2TRZ__Z-?+4^Vn-0du!Ou!!Q&&NN|6qPpZmXP&|`7I9;!dVcX&aN{*!v%o0sR02G5kmL?0(a7eE(^Lj$xQ_=zz1 z`l^xH`_b=p3hoMhGAtSgM%Mk>3xkoV7B8o-2m+R_x1_jJgz%3Q|4ePS3hYd@_p=x< zLuBI;o5*ew(waL|APR(eZ|ng+su6&LU3*@yrz!YE{=xFe9=K>Lnrns1s6V?eEGUMi zLWkI7u=S4)pL5C^vwlfU+J!s5B1wS$uaJ25u-jkPZrTlS)*cT>__*hbL7wpStX-Rb zWjYaYruaLu2$XImCu-dxWpu?}AaK`8Ynn#xjLx0>uIhOSyCXhdI(}2T@~W)Y=GCa? zUKsqr|5tI^y1lAA3=oi7DLHqQ)%3aqyvzT$cetq(%jc|3{b5V`>^72npgiSH+QMz3{d<=e}#B!3}jC7|t6K(_&7VO)c zRy9`2RQ$gAP9+&81Oni|=dm{8@+!(XE%D zxs6=v2;lE_HG>tl1UwF=y_0_^@X`-x7H|FaJ734#Ytz-=y!@=1gY_H|L>sHBtIhFA zdWm=qC6MzS&Px$ys-|cTYK_!jTSXyO8%6K??j~yDLwYw=G2Z_)hsp_8@8OjwUx&hd zofPom((KfKSC0Fq=i_y-0>JFPa|pu2ZC zPx`rMDpMz7lxb^anO7x^k6p*O;uP~ODa!Emj%IfwImSl0&+56jBwZX;TIg-|R?n#L zI;eUlZ?wWxtl4`=Qo1!HrG*`@lN(|WYe0?}fitK>9cP)x%sKC zIW{lLYYxTp9T@U89N+XkK9x__QnWRXI^EG|6SkbO&mjemhdHoJM)>IJPKW3EOXUfp zGQ4~*IQSNB^sd`GXrog39#fE|4vB)P9OXv|cKrvw+i|8KxB5I-M@Z>=*t;a{1dAIQ zZSH-<5ZX|Q27)56%L%qHc&Ex`kc^}X8rzcIPU*u}K&cYhvRwmZ97L^MCHDw#n~6W# zeD^+T*P>bUKTW34CBg1d_0!;88CdiVI=CKeaT^!id0rMb_nRyTo@krwMRf8YiIdj` z3RMiQZt@J((~%EpqZda~NiI`~2jDPP&?jky!JoKP+GJ8-B;06}4Y5v$|98ancFuq; zrOloa;F0AGu;*4sY0egZiE1^0pt_6Na}KJ|xf$@ediU@(gdAf;)*i{T_05kQzdWZz z^bBY0#78msYsJgX8Nq4k_It5!f+-hdm-F!{U9xORM_WLzU+VpQ{MWFf&kr|?c&C^l zA;5aiDbmGj5D-9QscdP`hRO>#=)5y9R#iC`rhFDVqb#G`fH>IO>? zfJ4PhxRgmVT)XgKny8#Z*R1&&Fx1l)9l^5mwuFzeKRN+?@Y8@q%sp+ZziZ6{pHXk#UE5)=xVOP^3}&7fi%aT?l=X`J z17@jyHnl6?yyv+^$iJIU)_*qJ2auBgk9*cXP?f`-wZ-0{LQr@;px4&vo1k40y*6I0ELY9J172_ zg2L)QpwF({PS%i}Ct6?T$!c0Y|3L-fgMYTeCG40XCca+BF#qLrJX^f^TfbRphb&xp z{;x`B;FAs{+EN3Sj+c2G-0?-S>q2g@%ljb9E<5d?mLfXO{&&m2K#!ym*(h7SQ*69d z@Hy5>xg&jO-1t$LKljVNuvc9{rSSFK5f69ZgbL=Z0DU4>a9y{2+^l+tovbvIsHO)n zCP8ZVK~87#Jo_luW*?ZFNwVN+N>(%ixV~@xbp$}ZJ?dRMcqFcG8_(DiJU@IhYDvf> zF&5rxu~5F1tYIKK;>Q#h*#Q0|5ET_A$rg_QJ@o|<6_#Dtkelc z^uop^KOB|t1xh#zviE|F46-J|+(j{bTuRy*f+R^*LYXtXGjKX0CVAE{s4P@)Qo=Ie z8X-7FpKW}dUrJZOQzecQk&@+yB|eO<7H(V-yOC!YqI40r8y{<5-nb!PRhW9OwEhe3Bv(I7;RMUhq=54wL4xB4<1d=D!+`WqpEmbOp*5|1o#UYf)>rN| zjds8skqT5joANX=m6}5rbh>>Cz5RhzF;T>5o8&J@=3^CNrfLP+N--ewD5mb6SSDxP z7dT8`$@acA6Jur#r9I3eZ0?@5R5qn9JXs?ZrPpnYS3_j*;tn`ENOd0qJf#tYAyqyUuO2`sL3Z9Zutx z7J@e$t}wG=2>0VrzDBDj&j6^qiOS$S0=k?N@-INiDTm!2_&#ceE zVxfY43ofpo4f>Y*MhI_m?j1UAuGQjEZA%?Dc-}7%B+RnlKdlz=bau$;ym@)eN9f$; zcQEpe=pb^G!|p4%*>T~r`TR2IN~hkz1@eQ^)9XaIg)XWEI|8uex&y-QZhxJ)9?f}v zu!F;U-n~*l1qbJG|FiU=7rAx*YRGJ4p77G|HaIz&TeK@}OUT{=3{psKNq!hPCs2bJ zyCcQ+rI}8!sBbq9vfBPFfmsBGlx~*F|-2b7H%yF5?HCw zBk0EXzu2-Vhq;n$Bn#muxGx!@QJ;!8&+g+TfIS`US2mqv>6h*S`XV?N78uPf4X*7- z!*uFc#|&nNmgWr!M+Y0wBapRLimMIOPA;WIRbas{qJR0VEeciQ4&4+#LP3ARM*tUt zQcozI*Q9*TQ>Zy&XBXR`2JZ^`1UxLY6t!S^=N`dP5}wM*j4lPQz=F^YZXOb!(fONMN zz0Z_5Tp>9LIcDBz67g2A(+YJ{)e`C#o`)`+TjUP&?}(9v65f;*xqCsSn1sC<>-5|uTl4Vr{Zva zF=lbmg?kVzbeDN|A(o*)fLNg0_E}_&)wAnj_WR%HdxyT~!MJrilcE4)SHKOo9jpF_FtULNVlC)sF+f-9+X^`#xka|&21~U zhpGnq*87c?C(dw*u2zR+o_Xm$&mLEQI7PNeCPcuLIQJ)poK3p*1tisVG-|Dy1|qio zY+m%EN=5`eSigCQgzq*fDgr%%UlXgq>hE)VLz9LF>n8K^Cq-GffpJmSPX$OJ-lT;J+^_7Uy~+hZd3 zuVOXQ$SfJdUTzwz9e=2%vm4WGC`~bbH3B|$QOQt1fA0XAjgC*-M4qaz-&AQ_wDyhL zl<)GmQ5+Gie!dAK^zlV{?s8o=4N7D~*>8T@Y81W0V3x9(>An%H$HcZzqlq`VtL z^~oBXE&h*i=9{)(XdbQBHz{ThR@@vctTst~x$WC@~uQ)ESm+ zI7XbMA@Krh&}|2sGdHYfY)v=+7;Db`H%f$m`QIS>^!Gysq^n}jzgVY@KFs6aC>%EP ztULLLa%dWxpY_b zPdx-hhnU@l%;r~y6T!WIL!VxM?IGy!@K;GzNylSzFe8SPXy&$_!dkw%B6=}@2ZC{o zmH?qflDk&SCiwC$V+*DdLH$`7`}2Uk#WD1Ylz+MmjY=xt<^-hmi1OXO#7>4&W`|VQ zjXnLr)uAoX;G+3@1FZQ+@MRF#(ra!baN*MKHlNI2X-8(~@jxvSUJJFeRKfy-g5l`p zD9a!y#{b8eK}z9bQQkKvc_leiA1i5tl@?^U7T51|aKFO1iTVhdw%c+jMgkEJ)tqZ*UXfJh-ZzK;XE7^mp8cWm=;yL_VH@ z@oE|o!+C>Sd6-X-D0HK&b`_|L7wK~XK)tN3m2n32UMu1pyEacq46+mpKPaEOEN97_ zmBJDziwh%QQv1J>K+E2>HdGUg|IsX0L?y46a?lqh-_DgP_nSUDU-YGD3h(T&# z0hx3cY-Yrsn+n@{dr{2=SpP49S|5dT^8kf?VUd-}tDDejt!OEo#^kX%!CAF<1VV|CP3Ic{a&sh7ydTkRP)BIxjz)FJ046&Y z?m5M^gk_9C=(B%yNZAMI8POU}C3Nr;gq1Nr|KoIhtEtpQ>X<h(Lm<0V;j>#1FjvZOEUlvuwFaut^` zE&~KicdG^r<^*SDp1+ahEs1Sy-;g0QS54}I68(3iO%@d0w7}@cZEqgS4lhP3kDJ(i zE+}lHV)Iu%L(&^-!o+BPZU4B*jWMqFvwa+{;?7N(N~i*i3$sr5==p3)N~04o%(ITO zYuG)UvRAZL#`TXd+tqct1J3wKf7{P4l8;aKMzotF>P60Z%#ZoU^d)5+CKtntDF5C| zfI@0||KG-dmB1bjEM!m`fuxOsm<_;U31=G~!daBKcG{Bux<(~9x}CoY)!Bw2 zT?pXIiQv%IGC(dGNJQCaMu+Gw2~BFu!D(PfvKi^=)>D^r=OA-3Kp<6TWwOmbCx}-! z5wp$X!jZTUhztMexD0%xcQ6srg55}ns*yPI=fvOBAp#6IjF;q!`!Vr}zf`smR#O~U zyBC4)IQOI7@Z9AN9UQFizWq_ud%6b$%Y@~WMLO33A~T^ABr+E=$(eZ6Q#5A8T)=a= z0fG_6vh0Ej6;;-y1maVN4l&N3Jgw#xk|K`GywGRV9Z9a}?;P|9KVlVdvK`T!2DX+qw2!3oj9+jc#2l-Y$Eu@(O_&7o;N)B#n8ZcysfuxXvOm zJ>N${J}7J|GkD%-jFw-N(2kr3ZmTJVq&!}}1gYdX1=I5Rza#t!bIQW^hq13(?3S>v zy|v&=YCdlAW6YEIPJf--14;cr@>96A2`iy8uX1izdjp)*q?7ro765V%Pmfsb5$-va zl2oa=`#(*>-)o8%7Msg!ocoNu{TKA-k05ybm`AE4z|aCuEFEu4OgNL09vLdxb@v+= z>AJdY6we8QYwxT4_bjtRwyUjVnYY*rK?2HJc&1Zu%4c^_SYv7WtruUj2PI-YSQvVB zlFUX`;qBwkw}G%qS%3JJ#;{9PiIIc$jC`iy@f`Qbq4t>e7ZB6$ zaM&B92!E1yVby0W_A^(~p59p8&9|Yx`moGxYUum>(i5g%x`g{JRK0)ap26KP-LvAv z+|0ZZQIVAX^C~^&WRRPU1@()GjH$LL*EGP zBK>4@8BWhpJ^_9pZs!}9Ht*L!yw!jJ;sP2s76*|h7d9q}m2UpZ%6lOa8bGZwwIjl- z*@N}Hpm`YZ2kzMC?iF%8UY|)!1(rXQDA3n>yfnj{zbRuTC#iZutY6$t_$C2w#RCGL z=f%N|tS+Y?ARqCd#O0H&a`f(PSN49(P{cl7AzfiUb_0eSTe`ad(nZ+RI%bQ87pG=U z2Or!n&VNjlBgXG3d3LCxKA5i^uChfX(!A!0u^#5XOUEGZ7Vj*};aGwyevA^Tj5n+` zF4BJv_c;oJV4cAx%#dxVfOx+ukFQFimdy4Se+e(AMOPJ?s1A@d8g?jAR@|HAyD=N3 zVgc8*xwt+G#MT~y7dKoMt~T7n;N}}`nRnG*iyN^}>dW6q^y47goLpt;uX5~#&C#T68b11i+awZ{gZq9*TA89em2fq^2wKqQPW@p|=Deb7Q zyl?X~FnIjCCaN*F{l{&Xq`iVD+L5k~{eSLWwTF|JKgqI#HsTq+D-b)HPa(tazI&E^ zkBvR{XWqiB2I3T~boA{hxcRU-w|r70w-9-Bt6Y3%aSOWQU8$vP`H0;&$2B?&wa843 zq#*G?I&Dc7UL33Gxw1b}^@yX)8)+e;z1YfD$}gE#alN{n`S~+vVLT%fj{U-Fcws%E zK;WNqx1PmCez&1DLKsY%+iynGm2jG(dy046Q}`!e5^z}h1u~PZC>jk%MQe|9forwq z`|)i%s=bBLCFj3{@Q2=67Dz&T-^i2u+~yMy-ZEQmP$Q}G>3HvpJ1%R{NX5~~)2YP1 zPxHhgqk-Oa&l`2mk=Cdu<#p@NRuGo`oN5X(-6_U;V75=b?mr?7A!C9B$@j{@dj;jpNabZ0TVy- zUQYRr<%-}mgXhNDlgU96uPXrgGfmY3dFL*tgKM$*xqoBLxsqM~lFAo%Ir(K6Pj;cz zl&gQaq}?+I4*G^yBZUCol;71No`x-35+9RR^XhKWcub;qYN(y!lt-NvfAHpK&}oBX zU!eyHZOw>FQC8`AZrQq~U%MraSewjYV^c?ZVAIiVW$Dx9r(0whFqxP)r`D)#T+5OK zzPSNrxkB*NnUG<%@Zb7Wb4cdXhRMCo2JhVOQ zU&HnyB>Lkm$b6^f&bgOUB@+*u;MVJ`f_sbRHrjs#p?d^({^7b5@Xg*rRE?+|{0dc# zlfNz<7Ot)uz;`zz&HHD-ATWAGEVA()Z^EO?%#Fn5>DYE`r)R~1bFl{~xfvcQ=wIr# zvk%{16$Yxo(YF|skDR>xj9>8e@mJ90qRVH?`9S1veoio^eq^UP)l!@zQaI8`s33km&@a&27PD3Q^(Ii zk-`+o=|_V`x7m?=GbgBUVFLb>TKBg51$CA{1M7EUe4yvvkk-MNCFkbF;jGBVGu z*>_E)e5dHWbvzKV)DE=PLK7$k;`*ADtr)#6hPKc|JP%VD%%xA}!_#?(5Wk~>!KYKo zgN<}&IVOASlLnTBxUP+5Crfe<80ie3sn}p_uK~A4 zJnFq0aY+f=e=>`RcUckrZQg9W0ve(9$zKl`toRkZi31*?s+6M~A8KO=1Cn`0j^h{{ zBijk+{v>|^uxkq_yiyzOeiiQ?hdB7i?J{eU(#`P?`E*Y?gP$MAyHn1@aV$jn&z>ht zvMfIo-}I6>d7kpIGLzh8+9d1Xu9o>P{8OVFr~%$W=xf^VLh?elpMNxS+n?WvKYnyH zF&)=aaic3K9NXLT@dOiv)D`_pCdKcq7CKiU2%6<%CmXNOD`!yQ#!uxyyS&87vOe@s zFiUa2`;gT@MJvc^If=TMr!_Yo0h#mQXKHt0a+Iplx+C_}Ti=(Ok|+Qs)O&?K7-%8z zu*~pbZ+A<5Gv+*FM)0T&M(jMH>~ntwkl>Rsdzatz%klPXTE=?{yKp*pcMVMeW1-j3 z5jGY66B>-q>5C@o5Zs@c@5%T?-AhtWPwJ8}SS2U7h(P0)0?#}S-=%VhLcI<2cxHDq zN}M=z^N>f>_7>HyZ3UbfhbtvWUGc30sY@N}rDD$hj6)BCPKUMauALn$9bO}^`+;v+ z{|3X74*pWMcY;yHgK*0B3>AABwpG>!ioNUio7AXK1#*9S&yWdGfnkteod>|q6?<8e z4-c7;mT_2%MMhzNGZ`oZxcc%C#}pObVl7Yl;oEaAnX4-AYLyoX1_M$efdQwi&J^jp zKQ>i6G?|9hB|)m)#cxZ05_X#@;1IUXazu#_!hm{R{Dni?g?APlO2Goi-#~3F!Vs%L zOf~7SM2W?wl9bOxZ7nWl#|=6LoUBJ+(BL~{@6O%B5K8pZ{~SX#O)Qgjd)w`nu5Pk? zPGYE#*9k8iA{u?TH=}09k2P)b5x-x*96LM>jS&HXrQ-iAEAjtlIF@vP$|-}OmQ)q4 zPDha7Zy)%fROok43c9ag8ktnJ*L-1n9CH%2Nu z{Zql4vd%FrKkz;UAL_m<{WsfpCef}?uJ;!DHvYe6rl9}|3z6p0kVixb<`n_ux~C?P`5ka=Y%G{tT3U9f1Q1Q8*x z`0Hl#C8_ob--PzuzmskqDF70b>g*>FsdKL|b~T~{)Wiz=(@$*J2V#Rzl%k;mAN0H{ zv#MSNcv%ePkw;F4#9eymDk~;2^F2>2P|OsAVzm+sClMG>n-yNw=9Z7D^lj&(Z_1#j zM8f4IgXWGD44J%ZrKrL}cfBWllOMu|KThY09LN?-nGoDInfAe5AN? zIurZ{EJCZzdb+btn^1PJqN!0QBByn@+|*LjvIGA;D8CC*s>^#TZ?cUKiklm69q-sN zybjJ4z=i+C|1Vx|MJI{GR5{L0zLC{#erN?t3gTego$UU>=Z(C*Lh$2Ap+W=)%1}$Z zfG4L#h?v{unjZzvy3!qoKSA@IoTYu(7oFbCCGs`L!TQqZ4apf~1=kU&e9J6vPm&VC zs!r7mn+CojOYu7*usBo*c=8n{`dP z$+&tIt|Zy(viwoyiv+=Sb&1`%CSBAlm#iDX!1>wza8^)Y*ITQ090*Z7*fMVHHzrv2 z49$O)@9SKe>#YSJN3J%2+NyK00&T&m^nW8V8|PD~HSS$Td3(yzi2nUnNtyIs&0r}3 zYO^>Yb;ksPACG|ioUF-TSSEM+I1PWG>F2MNGu=hlLz-bNo^XM94VbtZ`p#1 z@F$|y`Uj{I^BrIiXtYUfWx_=Z^Ol-baOd*U5ArQ!nBu^DO8tVT#3!I*Ogu+k$15PKn}P7(vP$XhEbS$zItvmkPS&e7E68U&9iOE~ zZB5sM(1=z=(5ZR>Cp4+?EM}~IqhrY_5=k=>ZFAen+oVr382tsnk?y36XD896Lpxe} zWl@#=BF{dQ@Q!KIti8>3CJ})O@gI34s1?Xt#NV0)L5MRJ#0HJG_H~9cj&UsZBB?W zyD#;D{lpw-_pSl1N$!7Df79MPeh4GDVx{r?xvJ1YK}3kDQ{$+x9{YOAMu+iVClJ8n z9M2y}9cBixw)$*GVs^ASN8@v&+V*j*q-V^~w_gAovFzIqJRf%%Ed6JFjyDYQ#3#rd zYUw^ew+{D=Hc>W`MYwDuNGC6sn-o-HNqWYf^LJA`R5|;U`YN9Z=(W4Wn>9DxGBi1Z z+O^GQDxCZ@x!~fhTXW&%m*f6s3&ZB?7nFdizirFRwIcNxr^HS3{e7;XPcqf;VD+`* zpmmwPce$LybrT-+m=+Ip1KOz|*ccT3t4j4H8T^^=Mt}qmU^Ha&p+i9Ek*o0VDpbZ` z^YVNBQd>QLAkQDMHDhI|s(?J5(S0yQ7EZ`fA|{2a+0m*tb~n#35He(mju}Aq=oQl! z%a+5VI`hrUkDha-{9vl{FNYXy5{^!%8zv$`e!nwvFE8OF`ff&?BvS-nN2q*YzX*Xv zyX~LIHwi>>JR*D}og!++C1{r_661a5cLp&z$|G zI|2+DUou>97Hj+K9ODKC-{Vp(F4tBJSr%VdEB$&)9bD?gGEC|w1psSm0?z*UyrXDh zOVs+}9n)A}T0$_aCBw@JPdh&*$ksxiqDtsd)X-~PEEn)LS18<70zASZv=5$vqerH7$_y6l;yGn=vz+5$d=HS;^+Oc8rE;`~4*4|MU&31y{B?#MfKZE&Ny-(DgzxV1rN1J4r@h#P=OBldlE0zefA4#}_% zXF(7il{1KILIm;jj-fhutL^$-ND6e&x?DEpS+7{B_R9k-o)G>y>OHsN-xsCAR$JvZ z;jRJ3QZpuXtp$D&LikCEf`miBci@ngqZNy_vlfmC+H+FQW0ocMu6(?$3ha)PZ9O$b zB9MDAi?@uobo9CZR$Y}dWjo!?XG0-#!h^E-ICExIBE0o315G@^!RskBep2KJ5&2Y! z6PK5~DqiHfQN4*+s{%ve0Pm-nBo*I57aeJnoCTv|(9c59>-88Ab~Qp#IeWA;u2l2p z>1OM#VgX6|s!ZZ-G?~d06(EuZvq0PXjT2Mo{gLJMcl3^I3&r_-)gidGL((5IdVgD6Jg|IP;U7KCSZy;Sdtiqk3Z+LrNVMw- zB;Mb*4A!YyaGB^#?MK4 zf$|Eelw)ZBLxrI9BlQ?m4C8%VeeHWS#<&$UK^%Eko>VeyPlsQnLe63DI z?}-lPt2-uQVk8YqNtD3rJoCZ6_oIL0BX+vC#Biz5v-(z1FGOy4^F%$)1-Dnr6kKW< z(IwTG*ZbDz9jFr=0y+~b%3{xdeq^sZlR zr~J?9JW|;F{})$Gc~zAkdGh$U$D>ZK8>JeDf9??7!}@<8m`lsp4$5%R^q^J>dHE41 z*^gaa87XD=ndSxm!UX@?CLP_YJWd2>_JEIQrfl*3JB3K(!Q=$_0BkWNsb*8B$uhqP z&Tk61{sKt(L0Tl9Qm)Ke=zKTC-8OEJs!epC>OTI@v4EAJadv`)jL`9m^Xhk&Z8_fv zVw|NT09*K<^=K?HsgmbRmgv+^nkoTY=bX3nbxbTI!3j)*{f{1pkL4R>YLnDMTP>o$ zK-exO_AMfDixgA?#joCQP$L)s87gHSR%9719oa-R;rcQ9m{TR4nGg+unuM3X zgkkwI;>}B1ha(=y)DSn1+XI+u4mX4kNGz*v-DiWEbPOV1P5>O??+7q+Es-7P!>6W+ zGy&;=A$lr%gujw9jBJl=KFoP5!_AaMz%EwHk?Og<=1+EQ|9Np|a5A*NeTWt|AtCC* z1l|TYCW#F`yiX`h9#U>fTB)&vd!y+8;QwvdkIjogla(7+53rpu45mfs+Rhvw^5<}DS~fFm z+NvQB=+xTs^4`kltTx5h$#HkRaRb>yABH7JIxeQjrmXcvHZ-|~w{zVo&Lx+~u=$0x z8hz0n;=Qr=%m$lPu8^^Pb+`Aq66LQy=#w7o*M>)9V1v1+q| zY~s(NntaGt`|wR)ZSLtq3xl4O--wT_{SlmmUCsdiU_2H3>x~V4+#NbD6P(EIM#1y4 z#e;6Yhu~?iM~$yjsH7dlPvRalnK1_W)8jSYiFF11>0cZhj_eWR_C(mjC%8B~KBN?q z8=TH|gi{aapDVWj1(3_kBP*n?;lh>%##o;}t2TSlCz461_tTHd}?pR2!_mm<{i$L7k{u|2_UF1Q^0Gy~C&7zl2n41t@5C zQKH7bn8ZvqeA*JaaLBc%&<}eEQNdw?hhH11>aEuTOcI`s(dd(*lIYSbEw_4|RI1sf zch;$rA{EHYy7ay_;lw|2`%W{$XvDihJU+@Lc5!tjfn%BeE*ixd8X}fbs?(Z_0Ooc6 z=t0TUe|*X12~JNvoWE%0nbqfwa|igDj94bV9{K_G=T$*pSf0v2gSZOeD#&t{zw$$6#X%d#7t586T`_)-x4tRMUy295Co{y@Ff|Tw=(S_&9s?>OtAg0PAS~cB);Ow}Ze-`I(8h ztb4w1PV9>;^RuPv;~LDo6*JrAuJ3vG{5}5r{l;cwi_KjKFOM7I_Uzql`}Si7d69&=f1+6AZ$0HDuFZxRF$PxNkYwugVX;D@(D5H6zFEdU?%>W1lflXWGc<-$$r}w-3olf6G6$J zPQyhcHoJL8H!EtswPB66P`f1IGQWh+k<4|ruxTA8G={4JKu-Rj;o z54Gbl=r7_%L9#&_^qWt$2fQz4qE_?DtJo+sQhX$|t> zibBUA$eMo?gf4*edzfwv4#$cMn6EAI)Y(aEK=J%ZnZiq03 zL@)M+Y6_3n`oe>pv(_A6-Yb&iX~TBj!}{xx_! znj-jUnkGPsLt7E0uSoFpk`}ehu(H%IVWvrSW6kepmaTt+6Njl*zW)m6w2b{4(N%Lw zHM1>ZAM{LIX;5YTFYo!2ddza$b7H^bJJE0d;w_eOeg1MJ8IjI`TiJwuuW20KGK#>`wEX|_q|wJnL7aPtSl4%0`2vF zPa<;d(i=f}ihkG;qMTfmR6hEBOS-`*h{?mkcUSdE&!;3u?pTM~0P`VL{)_1Gj+To; zl;=;*S1+yKTO}zH+#NH> z89!VVrSXGXf+*H{k$cT0Q8)2?@Rw#~1>=T`&d(e^3auY8R?=7uecO7EsTvzm7iw8- z?l6sY(+nI&D*uZGK~m=N1AO6YDZ=R14@Iwp$oXv1Cd@@B4R)lO%=<3ICm!NN87h=S z@MP9Xh1Pi1<^;r`3ikPB;=t$Kg{G|MIsBv!?fnAO*}yIRGWBmA#KQ7FTAddzWD>j9 z8ppl|ub_vnUL{JMuOO2d-5uN=B4Se=K}IW-mW&m#)G9fy#0FJ0G=WN5-Av_tt@KSi z5l0MNC8{aiY>3wK??PYD!?Q(q?-9du7rUf$?9cH!D^-=iSL4qD&i~6$p4%8qP=s&J zaC3+e6-;iQf{qKe+5w~LF8d>2dqDFf7vAj(?ecyXxu1T2bW@*=w*P!4(+?P4Zyu)V zTOYxQD*csc_PM_+!3=}3KJIxuc4`_|uqyLsv*L>9T`bqPM|LqT{Ra2x!zQ=-`(8dx zQsl&`BbAoiD8YXckIP2hN*Zqan}qz`vBW6lByL`ja1JfMwR7kG;ULv73kv-eB;pJb z(U0Hy4=YXnCYNC{?P;;pZD&KmBe4?K1)4p z0iXZm-M-Tc#(H3rF{yXwcYHn|gBgjDWGs2iR%O4oe~ij%D({Ganqd-a%kCE6&V!u2 zKBXcOQ0Fv}%=MYAxGLQCQ6&UM6zk=$-wjuXlF8}?X{yG+t#jCVk8PIqsZO`v!{cs~XmiXdM?FF`G)a@&! z{nvNi^~61Y&N1nLKF&1Q_9O@_bi7+K{T%$^ZDTgu5$DJvLJ!*uzNSW)5#Yb3Ql@WA z_yoA3vD9@tomCWXVXWC>6fUC~IV+o&*IVP`69pNi5M$B{dTM7DrsWr4y_mO*njPJ1IsOlEv=f3J zZ;3XC`g&3RNWnJL*@IS+f=U0*t4NEbUh8i(50NFI4#QbFUnsB$yg2!Z+jEhXulrI~ zvumx}=x9kfO#ztblxCh%@u)IMq=2W;C+&vv)4jKu(#a37IGY3xG+LQLE;U3q`SCdK z0q39clBeB__stsjuA}!E87M`D1!wb%@_P2?yw+389(qZH;r1(4ixjEC*EI;lcjXGw zbsh=!bScWjFl3c7n2Y#u_?R|H5~vuU*?bm? zuvo$8I*svE#wfu7B#=w`p#-u9G=V71jJSvtkWofPW{cs0Oto?SFAFTcX5fy5ngB^e z=`+QP`ELD1PL3fiRtFK!M+*OhwE|Cym%9tnhK+JQ+5P(@awea;(fH~=J{F0g;pTK> z6$o|cgVPalyK~Tkz&=mYC1sGT$RJORAGhtpMvUs!8C&E8m5YZjGuNb1vRlOtilLt z`M;6K>FL12RX^n}W8i+_C;zR?J+2MK6yjDPoC|MWi@<+##Ws`jTuW?d$Aeg&tGG+= zzTWUC#b!)?_Qr4o=uIXnzTF;V!^eM3w$BG(jKM!z;J>Gl!%%73Ra;JrNk8T`5(7;i z>b=OcmxkrzQCbTC-Y{mm8&ukI9GBS6%7V?gAXbd=lk#6b#!=VA5^xrne%Or2tWDcE zyOno+72ev``fKgQkMdAgcG?$r5Kd81tUpwlsAF^$8J!J#XPwts=XT6rzh8-iyMPMM ze>tKKTb_fOT~FJ8#aqn&7Oh&%g3CIU!yOPhrpOt*%>ce7cB6Dt5RtIlU(R9Na&1KK z6>Zfx1(bHk{P86i7$L*1DG+6x3KWgL{M_Kv8zTJJFl&AAan zZ7drZo$-t7R5Em?M?Q&4=Ems7KHrKsb7>jKzE80kDoFUw?!LW8PqoqL%8OIBvECbP z%K`ovC$DvkeRU`#h^QD)h;t2bDU4_@`;)X-*e2rb4fX6Wo-G*}>8jUkXW3JhXb^je zhB-mDDUF8AVC9+$PllhrJyb21OyXvK!Op3Z&#sfrHguwx0asGYC=Bwm!)`6ujZT8m z@gT1|oH8z-yq&5A^RTFp{4v$3FGK|V>BU-p`DlQLa`3~~1g_fmZ-QO|KQR73WSv!1 zTV3Ggad)R^fuhA}ae`}bD5ZEQP+Ht6kf4PYw*o~%k)lNk6i;x9I}{BN+=4q{^8IJ# zVb;84Wvx8quH@Wv&fRD4-wvu?CQJP^(MRWY{6I?A&y&|M?bT~)6ehB_j^*~xenIO~ zYSe9mXdhW$wRho|^P4~sJgGlv+6lsKo#lth!n-V(CO;3tF4tJ?n755+TdKp|!;YVu zEgy!T`xQwm1rkHnm0lUjYE+M$=#8v??@IXn`<{Pkn`;bohkh852`^?N z7+YUYQ)^+pc6G2{XoL}6TZ-FcJkQOlpz&z$gafE1N(gG2;+%X~Y!N=b2j9Vp9llYI zLQq0n980H6gXPF0?)Q?P%&(D@4^0^Agl!xF@=lW@8Qu2-8s7o*BL@5n%@6mDN#80s zgI*pEKVx5&4bvrCN#nKj$B_g=vD~5nG2Dm_@7<#=8Lw~>o~D{#8<~J|3J6gcvD;76 zr%+>}aT`d*m@P=}Y5pKylOVKsPABSw#8mk`NE0n!S%nO%wm!d?d5l_Ih&$>aL9N!F z7CtP{9P8QNFnLL%Sw+;ZAwo?1c{eiWf4ZUA?%KklnblfD?gx|8NYHM(D7afm zC_37{+5hV2QV8-VGfTodiQ#v0imzui^Gq}))uMA_`7sqq4-ZYszBQ-aR%5*|GRoBH zx_T8QcRiZolYxQOr@Uf+5uWHKxod~b{UGiFhay%YvrMyPKZx<|(TsU?eIR-W1bA3E z5eylABe_tNT7M~6J+hgA#d?!67$7(6+BBRvR_D15@McOw;veL`o7dz&*AM8drcRJu z13wQ;MH_jPL=J|5~<^=vbQ+(;h!mg;J2 z@L%`8FY>~$Hzx!!gc)f>amKxp-_w5JO@b6koV*S8l*A~~57T3UCE|OPjP#_kn-PkO_tU@bRehlIeX6>c$q*q0A5}sqP*SAGP3}W0S zOC5c)cfVn3G9maUJC=)yhHuttz74u@Gh+L;xg!@^4B2kR++VLcBW}t&#*MgT$!9@b zW;gA<#4P9yS*&%dM1Mlilu&bZtjou~D%1TaXrs|C;t)!7tCi_eRs*XO2HuLZ1_}XI z{3-=fQTqoE%$ACZ(WYDAbP>S6WS6(n+A^+X&{#ucYm*_)jTWUHO zONMGlQ-^Bh4~5M916}83ahquLckfd}nq)pPHM`Gerw;Z1>ibzHP-|B%|E1WKpEdyA z=F83o1)CkUgEick54FC3N!v6ztyh1-S|+BkR91hXy60FBu3e}dmEm2+ckUwaj33*C z52HZY_9=}rWH%v{$aBzW%VF(^>X;U**qF#8_*(hVw@0SxqZw5<@4Y1dzUm-wD;U}-rk<4Yu0FHhOO!dabl|6&<|6kF;|)gQ9P{dbb(#WvF)B{ez!t^v zP56zS^@sE3avr_Y?NzziAA_dDZbw2g$v5e36q4affaGe3-o~2NQ+=KWX8pi5u|(P@ z+G$75tV<;ZFI;T&91SwQwNi?Fri*0AmzY%X`KBTDHs{(_Aoc!b5a;@YA~Q_;Md`u8 zC`4n|;~A8?X=;VCuZDHM8_s8nr7Cg*W!F!$MBKD`-o?;LVi0Pe5ff-sSIK#?8T=K0w&lw-A}gRR2u{=Z;W zn`}q545;5M29yi1f6jY)KwO{*X{$j*qgCU`huoVKh{kQy5)dU6g)2yx5SfdK34c1P zS7RNq^i`E=iJ>jnMoMvpTp@u$?{QSGPDjHImYw;W7RzTp^3`F?e)G+6u_7eZS|D}^ zPJ{L79mQd6fXIoEOrwr|ODV?A`={qu%Ujz~Pa&afGP92{Fd6i|;Pw40OR9@bNK;ke zP+yA^l&t-5+`XIZd{Xbn9M_euuYDMnCJ1sZ_)^wPfc(_tXsPWfa=DeW(T(}9hw6kF z!$?a~(;6uh_dvXCpKr(VNv5v+#LSSdj+)|AS}pC&2BN!VQDMsmo6gGgY4Uml93Q9S zY^shJ<;!p3wE8=+FRz6`bq}>}%8Z}S$S~UR^Vg%A%1nGo9!;VeUSuBrLANG&)z4rY z%Bxy)7NaFhA1-`+{BnYPqYg7Xis46JTV#=ti~%T0?lblA6c=objw>_U&SX_Jg_9*w zs7T&aO>bMh!B+{J&@bhXE??T#^0f~==9CZO=}(bnEv~W4@hRyAo@DR(3B*)Zu-{|W z{b?-z>6!4+5bUmZ`xFUAMcrRi!;<0hQr{5fT)rUo`JHc*_2?>H(c5&#^&^{1vv9Zm zCargIqHm1u{i`_Gf z#f$RV?hS^-Sy~@dlnby@7e#vhA`(HV*Z$%SaAGU4nfyV5XU|A>d3B4@()28@ z7|))lMj30N{t)69naKjjYPfsy!w~Vug6&U_SSM^7?47ga$ zI+q1>Y3U@iyiZt-!~JaZ=+xt=nB683&{0~FOD)*Zu|37<61wlC*7qEV{I-qE#52XqK2*Kg znoxAZZTS9ckyLTbzLD%r6pGZIU0y4Z1j{gVR2Hj=Nl|#i$`C6FnEA-BnwcAz>1F4c zp*SJK&pD0h*%{nuJG#iLQbJ;IRB3U-BHR@)@6nTby{0#1f)^1+wK$bG;1^7r=`mDO zvdMcD ziC<}?iDuf0mMlYW)|H%vCOn>FAHOMj?kS5!6_?s1c=6VrDskwCQOAnY+{@(zhWe<6 ztj>ke#_ANM!{kLu+YHPzbXy$JYB|mKp&>s$pY2*1n*2JsxbE7&XbYJ1MpP|j;i&o7 zlO*JTM^m*Ukv~l_g9hQ>G|VM=k%QAsZ%dYe*x!lx0TZ94Cu?)wt0ZvG;RSOe)~$9{ z_@0gQZ`u{54h!XG(XV%`;QvXESAh(}$YY%X-=Q3#Lgp=@{!F*VYn>p0YU8o$1S_US z$NvejTIyS_wx>0E^;Bn^npyf3+x$*wQG2Ze22KC%56>_H#j9F-sXfhKi~HyoJBIx0 z_~zi%4%#~;jh<$yT(BCxSmW-mXF=E;1BJR?(O|n}lh)Gwl%1mQm}*B`!2caQIU>Bx z=n5=hV3!k)()k#UiVeJZ?R$4T#gHZY-@?r_`=IA?cleq#X!#ue>=jQ}wGIHsWuNUk z9DklndilpTWg=n0cw*NhgIoo5un{B0P=E-X>`J7`TvR=6qRfw^l;NLaG_50bz@frW z6F+TPG0SH}_Z51WHBTH7T?hMJ!M{a}xeO>3pG6p&ubK0*7VvsTHOk7{^zLXz)E`%f z(geB$sTC{In>{3#T%_8NeS|5zmu`RmZIp*+-2W%lt;#aZ@Z`Y(=ziw>UGenFP1f7c zR{V2bjW2Qb5q1Lv-R#5vR)f))zKcW7z}s~bBB6q@{***AJ4Wp< z+9octMD2^Jjt+u#XVPLr9o|3WPe_P*3b|BTevoKz&cgv7+5}X2I!aO&5YiFR!o&F% z(T-CJ-RYTBU*sOJ)J9`#B{Bn%46}!X`S@)tNk}_e#Mvk8x=l8o+vt^KW?bqjKQj~x ze3|x~Rg+3~ld_*gE0IdM)xcBn^|B>nQ$;sl2woPk6NGZ%B~dkVXt88w_E!0F^Dk@q zsb3Kd)U_YbsOnV!;w__4OJlO#%osUw(@IV9;UgVY#nJv}5zzl&qpT|LSiqa`%P0c~ z8`^!Q-%Rz>ZLI42(=iO7`ak75#Ag4O2kf8o{P6$KXI{<|UfYFJ*IL-x>$ZlT2@%Yx3-8*6bD$Pkd;T3ifaMP=V>puzoCs<=E|G?6&ylT(iHBm;vU< zdOk%z+DsqlKgNM4zSUnZcNrQU^@<2cm8BnlpyI#@In4${K8eVz2g@&}cf33WP+XQWkI{IuXIzSPVSdy}gbaqTdS{Bd_VvabzGzjwWN+`(y~d1c&W zPD?X8R`h(!sC$&yRL6ky?F~b$M&Em8qDzMzXgh;2jf`Y~;np>tzEe7I>o56HK_}8@ z25qKI_m-OrS(L6iui@;c?nsrzc+#_}&0M8W(v+j|XcEwW-B#Y$&*}i2q=OCd4Qrx~ z*hn^yj}1O||DfR|A1Z*&dln6TCOG_CTS=6ZaB!!eV;b}ZOoRwLNR)kq=bnsRAVi5W zx<*mscbHB5*0?kGU*11sTQai~?SDFls+*Sc&hy%1SnCch4cwJxqFrDP83|~~#`F!! z33<*_vaKyg=Pa_+pUE&(8MhhyYUmLOzGliAwFvaI9-OaNmR;}kY~CgGLpKN)ajI#u469?@>yLY z`~JZD2_CdlA9_!yi;uTYRQ|%$S_;0~->+ZM1B@we<@F|n?*}Hg>%Fc{cz8uV@iG<& zlR32c>+~TkV!YX1yL8H=-!3)48d#ALo{|1h8f2brfG2VtvN=Pb7by?ULeWzu3Q3$d z?=_zcv4S9oONOxk66h(W5j+EpGu%1_3cpAg>R+(FXEA?vYnFb3zc0E~tBI42eLK<_ z6#D7pERimX>5y%^bYC&Ccl`lhlsC*K?ouXaMV%331G+@wo$8}bz?^k;D)rctePc-n zgkIQS1Ga*~qs|Q$LJSZ+S9g;ZL}wQD@5U8lU#Urq6Xka`97h^5|hc6nZ&waIq)?y{p;3MohT0hWdX$2+!Nv|7BCYJ>sfvbBBC`vJ&-O z*p^iPV{vsD=hqKsTZyeBzU|Xz^E$!`j-8MM`Tqj5-EPp&xGk4xXdZ?0U4Ozhw+vUf z%@vUZrca#Qt!1g|qNpgpftGL&mg@Ugg_|(cV2sCR<^`XhGA{K8m5h>owm>krSH}v9 zm|?)nP@2UyLh*=oD*Ek5G*9I2{GdKTC+G2X-8@kJ?v7W5 zqd(RA%kMB?=ikT6I=H7JT9EYX$jtKvCLvd7pk&04QHqBgLK|U?VQy7l5gTr`D*1~_ ztF6)#KiLY(vTJzi?>iNR?lC9tr3FmER~ovwJPmU1G0ClIEAfJn4$4}e%2V7f#Z}V3sMUcRo`z9x;%JH9x1hmVVH^ODzA!K4_)z<(qcH3%X8MEuWPjBSJ` zBi>KyK2`W~L~`-$WPODs?f3wc_LoxF$#456^}YT$>PQHKKEsCnl+vxBOK#v}5tZS; z+zl^3h4iz)s1|!FYA61k#AvkO{KdA!1LAoE2vKv7 zc#WwU2f^g&^CX8YBc$rBP}_jMUaWM$ zy?2&L?HGuTp_rI*H^K_0u%hUR(s2RYiNTzpZj%#7ERl970RlOxGOkvN)Mn{ zg_d2463;a9a)*3;&Svx(GLX->zkR9|feGCB>q%{;Z%ap-u8>LY?GOmQNCM8_isTE%?;x9wPW{Ry7K>3SKn|^$IUC zm+6CVJgw8S{?T6M=$=>ETjhrAMO@6A8XD8x>JEup(`E0>AM!y9yY2Y#qwQ}tH2gPL z?)*1)`k))wae{fND@HryePZhg7}oD(sN2Wu`8v6}4`x00)G917mtTHZa44f)XMAzy z?Hv21$JT_p%F(b(e6^~h$IC4A2qT{(-%A-}idAp>K`Uil>&tLwmVPI}7)8G!Vt6vk zn~Q%nYw&PDw;5>*)W#%NS5H6=lgbH`7`piZ+cIZA;o3e2? z=@=xIi0}1^`*fo%1z(u^boE61W^2v(W_j*v(+u{2R&6R^>5zv#v(xM`Kq@@srWm*_ zZpAW28*0e{30;T`(RtQsvahjTMG8vQ+{iu%x7Rb6r9@1aguTSwEPwrmDo~meei%J9 z?RSW?6?rF!gPgrc-PfT184~VP3t*{beR6J;d2#pl`LSSUPnA;E$2dOzlJ8i%dr!B_ z?!=y~B(+ZnX0~a5B7rf(osMMGzE`;f<9S8x?hRjs-%0-?^DQ~|YPB(VF)ge|L4U$& z+Hx%KwL9%^82!wdrNv2ba9QQOXgrwm9Qg$Absv5saQ(IMQG^>n7@w|Fcj~^ZoSH;OU+0EKpY!n{Lorb~bG!!1`$NdFFM@kaS z*}y}R{reH!^-*y+m~tgKYJc)si(QL({M}2>xhD_z$bq4E#6ChT1G3WI#w}(%M<`tp zo`M0E&W&g3ke<40`ArfR>vXYSM8nDa1_IlwyReX3P0&N{_Qz&4i(8d;9e(PHDtv|}5k3lpuO&!Va43Cas zLI6aD!&Nn6c$R|qpq*RwyTN(-kOOo}L)gps)KE6OS9cG-S_?!r;@Z7-;Z$*DC)Ps# zZt$c;KnstgdkizPw*R>X-;vj9)%gJw7;*|Rsxt-cqL%y5nbQE^NQ0x<% z!cSrVWrmS+RVninGbXw-<^$2Hq2eBwMiA+{V1zs)>vDPk@*B-So?Ld!{n13({lOVN zS}nRszu!Bn-iWPc8$>wq{1+6zA)&_O2malEN4Ve}{znaV`aZiTl5K%=ZQ`x5#JuVo zTBH3mE$5Tg$ls?@tY>i53T2nBzO9Pj$6&Qk1tt)%q#rA}Y`;bdX#?rqHWF>l6YkHW1k6pvB_PzuLB?B z>6ZE5-OT&ALCJBg&#LStj`&uz2%KMfjY)feK(9!;~em}-jayo<1IBmrz z-x$)k67~o}d*z70VzpW|4)rgY3mFx(b9!X!>JV0is~}1|BP9i3wp95lP`jvGdU_YA97fisOqagAuh7ooU@7isLH zLPZEyV$TEDLN)W2lQxQXzM$)zrms{CjbyRH#vK+BRr+)xs?WhCLg&A>8)d9v?wKMV zsN45nn>j&lYZk!OIzzQ5j%hz>dJV1>Ix}jMCPcnjNM3Cg{@0BQAu%l-GBlMG=i4{t zs}Sc~^bXKFL8x{sU__U2b)`2W%NtTkv8rFA&o?+Kejl&y zDHvoZXrGCwPnNHjOvh9=A&MKvSxQSrT-jm_j#Kf0c;2g$rkmRvOVHV|DhRbHj@JL#2DfeGQ=-T89KQN}#pl$zx_rix z!1aX0;GZgYFU_Ik6w2Plh!9PBSfP!8Zf)a^92?2U`!Jo+iFLM7@72N9$lu;&hsgc_ zALnnn7ZiIV79Xk#*ja)xTa3>Ql8#i*UeX2d`HkcXd~zYbH{px=?X^kUXEszAMidt& zmi#ag?bW3J$wob5(e|Ows1y9k_I&KMFjw!H=`>+9KaQqVNFW;ykB3|fWSeI@vx(H} z7!?%dEc#MwU6jj)0L+^%(_-iuzRQe&u-UO1{M{x; zqEiajKxpv2VuDj$hSYznO?U5?FA@KHx#H3mS_^@0=;ca#sXeVJM!}=vu zT9|h#;D~|Ulqhs@gI_Cexneh7rm=6+`v!yP(N*kgy&m6c3^lj5Nok75S4?!(x~wsJ z*;z|$@a@rg^JhW^6Q0y=$GCI+;9+Y)Eu;JAWXcK5ZW%P&hh!} zOiqMeae3}4>}kXH^*2v^vEI89vyl$`c+-869>|Xq%qIw1d+iAyBt^7 zhj`Tj#b|FUR@vZ|v?xTZo~-{-GPChWiPTypH0XAv*`Lgiu433&gsA?^KkLLg%6x7p zB>4+JsLWvJeNvG&qG>|MvYFU6(um{)xQvS-IYJVcR7$`u+~uy_X z>W#@(c*9nH9^sY>vygM+eEq{fw{-cTxn{~BX-xb1z)I@%ByAwR?~KA8x|3*+hPpb8 z>w?0Z%t0hz%n-y>c%ZrG$gak?OKBpP@HOzPS)!Rb)UV|{i~Tf;(6NfJZ=aWKm4*3l zfJl;@3d7*P^$_P1sDuc5&%*M=#o`zC(7>rRbL?kd^wMJmq}coOkHvOX61R;%#`9hR z#0rHdEz&x)e0ZJhQV?2!8zm4Rkkb+6cxCBMo-#EQ{MP1x9 zQ1l*AKhwj8XW-b&D?qQyg7&)AL+_(V*eqduc7C=8B;(4n7$8ivRUGUlsdyOK5O8C< zs^3V(<9_tb%_^NVh{hiahvLjyu!7Rtms$WFpJcJ_t?2szXy+H4{2qEq`o;ctqDbZJ zZR%1c=fqKZ*_l7?jQ+FIJC{jU8jpsiaeDQg3N?5WoYvcdEgNtM<>-hC0l)6gzy7~Z zHE?$`B}S-C;N)KqhM`<^tIt4m<7WF6p4eYCZtCF00%?#w(U%m)_X%tqB_zC?!1Apq z36BaYMOw@n4eCf~HN|J**XVq`WiL?4ae1~2t>N2XATd`PUxu60iSzxW&KfECq=CVB zE~Q&k8Mp=TD*qrYARwJ>>h;NbFjkANUv3spO-8tseYFaMAFB!WRH;fj;4N!%v&kYoFTTn7dLn8 zO;(2OZ3WHYw}Jnh*!{*gr>NTC%T4>6eVdS{;D_w$4SEP52@X25grW)iC7Rx|B=7PL z_C1w#2dyxqf9srU7Hf%SFy0ob+Uy`HZ*`xr!X?58*C~~D%(MjLC;M1FMqIADQ>qyBuiWJ;Nl9J*cd3VIKL9G3CDc0tE$~@2{atUq z_t92o%1_dikbib)a4RE@C`uLE*f4q+-^TgrEi%ikQc%}W4%Sq2{f=%EU7;xHT2+hH zOfl4&B9uHyAn`%ws z!_W-YKew`jvk$lP3FWny^iAH@fGiI!;P7EnB7&yT*C7z7JNk|GachnCpl%nJl==)@ zn%;hPy?mKb$aNbgauUDl9|JED^W#n=Ti-HRW>lR0Rs>Jg8?Po`Q!W&ON3|N0y#B7% zBFU4tkY$>gVY^az79phn+Hh8r7L#26zt{FbS+wmB3{zR9?4UdgoevhM-yPLjUY z>e=h*`cJ(OEfU=jH9tBCuvzQV36s=)m^tLW&M~RTb$<$sA0q^;@85RDV1fNzLNTagrkl-p|L=Nb z*S(bP$`>i2MvDI5SqfPYVF|x!(&rbFSktZ%qi5s+#H&~Ry$a}D4pU;y9(lC4@I!|E z#a$o2_it^a%5pz?_X}?<_B(k!&S%L601t0tGoA$klMca2nV7~6A?KPz0k_m8qc`Ti#@1QRt`dN3oE zuNfzin1=zhY10W4Rh})|mEnLXu6=}W$Wg0g6h7K#_bJP*X>Ko%zO%7pwhhApO z^{FZ2n{_m&`n0pLg)>wGzk%@jfkAG`=KjV;C~s1o`sRE}KYgCl({vVvf-UZ6 zzxUzM=sL|z0$1#Q#H-_b44|VFcUo8vai=}*wUAfU%G-j$fq5|!P|SW8XO`}$P?KoO zw?L6xJqAPaCf`NL1sx>zLEl=@sDlDT$8en%CYtS3$)XJeM|1cF{76Q0ttxS2VU~F&okAtj+FNglE zTSPk`d-AH2Fz2Ox$1{k9?O~mBFpXj3ZSrg2o^#9ZnYL%f0J$TT4Fx0M{-k7c5Q-z1 zG7&1e2MN64I4oZcb<(i0M>E->@G&b&f0#S7w#*;i<4Mmb8_M9}Ln@#@2_9%bBrnHf z@}gUWrQ)V9<|~?Q7IIj(e^t0e6)T7aDkC5ERBRrt{T}LE?hHLc#>PIej-3bN-8}cM z8WIK{ix`KmkR$Bcv@XSZm&cv9x7^2gsHyQhuXyD`CMRL9Fn~YE^o_sa zjhS~i77KFD0|u743i51=OQVnFj8>&fy(60psfIjzXXcM2%@en~-A&?eYb~yGbJKD6 z;;2%b^{5BVeq1(JT`O6{eb+dWOf=&Ax|$mHZdVggeC-H{2<%H_T`#!5AQ{^f`f8Hk zb}+QEqUpB00|F1c#z-^dRB@V&KP|nc*(?-e*TAj=)ax50xPaDgu^wXxVAb~{EJeKd zh@P^v)n`vgA|`ArH)R0wslu>(Bk02=RBrULVZ~GRM0A0)H;V&>-jw|LK0G1Wf*rnQ z664W^2BK*dc95OyGcgI6KG%9-FnC3P+_!<{=1r0Ju%&=G!8*vX=#*Kz_T1j;!{oQ{)ysYBFxD@LW3|EtjB5$n6Y+nunw@dT-mt${lNU(05+DX1{!=@|EMs{p!!(nmBjZ z%yq#t>W=NgOj$*qp?X}osi)Jl~_Ufhz&Ag>xX-=+!f z=l~dnrp~f$xwE6Vr_PuP;KcN8*FPz8IHzAo@d>ep$*$kUxPNE0z$ZT)*!DgaVc5R$ zD3ZH4;S2B^e&)u^qAiyj_^|sf{1z8mzZ3(qO_$k}Fj<|`=f5_eaMu6u{fud}k>8nW zL%L_mcrc16D*}b6265XgJ*wyBLhMiy>GV#VTuY?Kzjk?PJcW1Y5C&jUUFV#htVHi5x< zt$$DV%jUYbBqjc$47hOOebMH!>Z?TEo^1TvO&<9+wHDjm6n}|4f7}-*E-BbnD(!>vn z6Rl2@lqOEJr%qL@Q)=x*u|#A{(fIzTLwH?O5ndWfZDSV4b^P9hBQ#CA*PRKPCf3g& zd@NseY-znZbT-XbFLdlGNK{VQQ~=SKwmmiFypl=5Iw7*AuzY!}!5|fIo28fym;bI7 zc`~M;YGoiW9se*8@Sfq{Kz%DhmjV}jeYn|}1rG!zMmz7W@NLRAKLMD^f>oH(vhGt) z@daZldQXBR8GdGNkU7Y)>g4&R(r)~EJbvwJ@lUI;(*SQ35x_N$k(RuT@HXIXI~qkV zp2}WwOuj!n1P2X19rwC&yjZXm`{?VWx_n%t+%#bzJi6uOXZ=^0RW2hnRoOacY@>JA zGQkG8IX|G9*Pi)zejfN6&1LK2!}1Bkj>(8MRO+gwFx!4FUQb7y@cLHa_$msf#)})6 zm5F<}Fve2-FAM1T832SQv)tKlABoGV8UVg4G;a&t&?_wRBmyPP<8X=>>y>%_sOUeZf9^;|QmZUW}X3UQ$p&jXVE$ za#9`kpdyH|>1WUSGcPy;QmH3MtV4X=3N3U1qcC`K%83l9^(S0c#H!!L%(lrdWMpSD zBRPX(Bvgn#ouIUW@F3zF;ICJEzyLOlh%c->;5IoorrT?$qt{BhR#sY}pD2C2YsqeT z`~JnPlh~)lHi(_Wf~wU?xe*t-f!Dgv0jM1|ZD}W|DZQk)E1e`^jT}cd$E#nHR?iru zPDqd)$!Cig`yan62;R#)TjGAbq`O1h2zLsqO1`;haEBvh{ZR*zEH_B2PQ;v_QWRVz zglW9!@^i|$?rzKHwVtTFElCn}gpS{Ael@sK7|tMn2m3AqFApAVjj9u`CQ>;zd(H_L51Ny5Y##RnyW7wkU!T^P8U+r~ zts_e|+Y`R>1&qJgjeGsackBhfqu!sUFMkog1`mSQum7p1Atx;R`^T%%-mseeyE=hS zAW%c%pRib$dA!BU&aA7{!;!sN`R!|YLg7YG=3tpmxCkt7 zvh#;F_A$DFHXk|1E>p7W71Mxkmo`Lsxv|L?I`1xaR?H(mW*GoTx2}e}E_C`mF5#D# zyDG0dJIR{#LD5vlmzfGV^u~ccwugQM;P)|nn@s)3G4mV;f zHn01NA%`R$&NrO-p3`H+;PZp#OH2?zgzjUO(QfDfCy(9|2(Sc5W8_9UiKCiUi`7ER zS?_Z!8OES!@|-KL$OO#jyfSXLy8;ERi8s@FAZ`?MGj6gomXb7bjR@)a;=3#T_RkOG z!_cS6#XIzlblAl~vadwtN@1TXwc@2E%1tBGUO_5PFl1&#ec0V@&%T+68Xvv z008kt?hPjlAp-y1>O{V6s?~hPi5pV|!xtT^0C`LNx_el}VdBXiN8=8oD^?h7ktf`i zeh+tjX7Do`2ZtXIpFJzhmT?BS#R2lyK+x?JWU!wN92XFuH$S$_q4iaiUbmBg4N(&H zHI)9^FZXR*&Z_i8wqot!*;uGb%dLBA zH*WNes0^e~qxkuG&DK6v!0PJ@-7iJ6>Jec9Ib@%d5tPGViG}@@KuNM|+2w)|9}RlY zcj(Pl7?8)?Rp7{kp-3gIEO~p(CNyuzeQYT*%b%UXlDGdd$DdSMuITxR@b;879*U898@{n3thd52pu1l0w%5tM9+_wQa}t{y8qEg` z!Ru3_BP|x9EMXjY@1fzw0^;&_19NHMUx`RE4h3J9+_IXuhMja;i5l}+Sl7$ZwhOEH z6ZmM0h3HEOiTa%YFCS4PM`u~gTxIvD5!ut!&g3Q498vX4P^{d)juG$U0sVKg3cj+~ z>(qRu6fruCIsS0}4YfB7S0jm&lMRJ~KGN@RW_MP5rBsQJLn!z$Qz*G%2sft=&B=E$ zm)e`^($MK#%vt>^xDZvcL0tpxOTCw!r}H>>A=V*(iV=6Uq#-cmT!@n*d~nOxezH+t z`ZdOx__})|`K{GIMhuRSxy34@XvHR z=t*01`O^4Xpf5lq+@NeaH&TDko!_EKd$rl_2~W3xOYJ%+G1g~Bj_GpJ;ODT1OaIdg zg!|^&fN`MLJ@a8#pgz}>`O~`~4H@#)(a=V1#u}oRMp2mW0Q}%HNpPWqZ8OkWvGK)L z726r~_9Sp|{K_7N#`EgJ`{S%%RzhB)%WKBX0IbxAJhb}MpAjc44tR*XJY(lm!)~!u zldjjoZEHe&)S_a3v%FRA$&XP=IOQ$^$`07|AjAt8MSue!iW`2_zuB&Zrj8mJ7c+eS zTrDkRyWJv@^zX@mc*i5C$GR)0krXcTJT||j;P$(Cc`ilu(068c^cXn=rg^e1b@KnlKLx3g%0ozpt;^+_yWb{pH{n-rJA<(+M`M zc}H%^a{~MvVh?PdRpn*nWfi-h&Y7*AFgFyQ^Ag^Y_Lf`|_E&|(}lY+Wf@+#_iWVKg(Lv?u3VeE4>orPNgmwR4UMd8sIdWKY#~tLx9n`! zwWs*mzv^E{d9>+!Yjc02Ax|>C9VH5jb>ge82()expO3E@T7lG04N4C>Bzq(_t>&gB7gCqN!YJjZ5Bp8SoCkwo>b4QOGRplyeU;uHN_PJ&2**8&k@*iQmJqc zTa719fR>QCl||`#`}TI(!^I<@CrPT9tys|8h za^#uDT+xGNS7I+~iKY?0|1}YIKe1cV81vIpy2t*ufX~dB{pk`7ZorJt!dHy!WpRb>Mr4%vC5HL1E&0VpygR=)^{auo3mm^HwfTn3AJ1ewu7P0 z=lqh%4>#_+9MYakJvpC0{Ow++)eSn!hPS;L#E3+Z1OVR*u*)QQ`-->-cL^VnU=$_x z;YO$h9P9$;X4tEISFdKn5Gk`^dhRTHr`19z-6@-r`O56)ZSSY~u=nt$s!lULrAFR4 ziveX-JVKdL8M$9PXD@L6!~lexl!`j<{S;b87ywsPnpWY5Sx?&6x2)FZ*kBQ%@NtVC z-^+9HkN*B9(XF7Hr>z*L&W^uW2Seo-=iBWhkCy6MuU7u(`Ol5MC}Sg``27wws+E;6 zEzKoPFg*()eNn-LcqV}TUDGYn6cuKQBK=cYtwgd_vEn`>LhYN{c_57+VR}&re)c%j zlK*MfZ^q_!+yv$+ykB*Xc<>}pLuXcZN8Bn%N(ErL6M4n=I=<+3;O14LIWLC_0qnGy z5fkK+_3Y3e*FWOy!Y>!m#gKrxH3tFg0+!0ISQM(|djEbulJG3&}EqjL_u&B(* zdU1?SrziSMPY`&w%c%Ds5aBu>EXuvtbtLo(NUrO5KC!)Eh|4i!9Moe|ZE2=vhrE|? zt9{e9J4UeMtvenNJtM7Fw+)YC+ORl}yzx(^Yp(On{DV{dMXPyjWskI-?8S7-^a3ro zyH8ty2>;b;H`_Bj>ywvW`Ff z-xE_vqR6Mn@Tky!bu~ss{*rYnk%v-ZFmytM-relqwoR~Wcjv#uW41#-s;-~@Qc~Qy zpXC)2Qwi}O0@nJUPRIpZB7)9GR^XmXlozj#4p-jinPukD_Y|Jnt3Sr%29Yo6)3`+# zE+|nF1ZA2!n6xqBaNn{Xqz!Pa>B&+0Wl0|u58TqKVf+-p<~^GR^mxAjp4vKv=czDu zh?<{zMU7UvwqHVZKfBH(sI&&1g#_J=0BT$Nkriovrg-8(X~;lX-X8pox+0topvFyH zWhUE?UOzWe{h7jdVtp?Uj#b-MJ>K=_{t4kyI0#j_-nO!qA!<(LY z)J2l~mEx{ft--qI@KgPGuh7ggmOm&a7v#l}CwxfqzO4H2=x{M!*8gzD!u?<8;o>E_ zKwv@B-ViKNPrOCHj>wiz0IGf~h>?OBYidlqVE^v?tj^OA#C_75@w9Ko`G= z^pLhyL!; z^Z*L2A4|XIwM2H#)ABn4Gzpt(7FKZnZ&8|>AUEW9c|QOYd6(YF*&;+bc!vhfP64^6 z^T1~I;O>DPAMV-#n#FEM6Mju%Rh?(KrhqD&i}Q1JSebRy*&tYLGV#>E7WF1;*w9xb zUQRARJVSi{I&cQ_ONBb3O+Z;a52|?*1e%of62IprF~dvUOQH>9()Uy;+`K$1;TI{w zuA-*uk!&mfQFjnbq<_i>Q9NVjnd)!|m*ko3knE~o>}=sVfyR--VaJ^zD#0BuO?M{! zOopm{VK2d%z^^gt>L2CzBGFR&Nx~^*C1qGD0-`+0e*9Ct!!7KTv5RZUn63vdfn5jE zu@2AMeplgT-x*Mc7ybQp@z?p+O=d}75J0$qBH-rDn|9+y&)&Z|up7sR)|2~`T`IG& zwZ&MrTC{8NCesUb1tS^hT>-32pJgo@A>39q zN`FXC{zS`@HB`U+(>!y8_I&4Rb6|A;y(sh1eM2$NQ?qJNK{ zWiFHZd$>2q?+zlg+Lg7A+bC32IU zcGqfi{wrtUc5HXAYkPaUva9W7A)U6y|8aY`K+xxX#4#MMWd^)=*VP08Jtf?{l6wdSzFyY zADiw4;Gb%as}^SBV;at@Xq-?Up^j%emA@Id^z z(yv;hd|>AYi##|gD4B)oM!GndodaqgPHGoS;FNc&3bv;v*H9iGv^sX1cG>Q#N1s@8 zGO%VbP#$wn$A!Y8Xt=P6-_t?dOiVR?)T||_;~$%5Et4F((uWP`I+aE+hD)W$r=FBWN&MN#fU*y%&_%$iMRO z(93ug)yeOWKa!5B%q^ZVkuO&L776*?{9CR;EPh$${>LJCnq}_KOYo1&$|Z9sKRHFS6AKOyWl4v%fOyW@Tr{R?~g^qD<*@^o(AxOq$UK%AiZ zVUFL-;fFP5WlSy<2Rt$@!GG6(Np^YoBTveo%jZ#z;CSszr7A|r@<=JY4+>lM-j3PdJQq zAprG2#mq`8gqsKr)Cb6xgq@hUG5I2_PkqaHyR)P$LTi}bOYeJFbpotDWEDSKY@%D? z8F+g+`Pe6TzG6|4aQwl^`Ou!8^zE!ava|ECWu0ByKe%Bx@4RU@Z{4$w22fT!4n|`; z>mJY3;@?prP**-&w)j%p71ZT7|6K*{}-y z{<`{cF<+S5W{{aX}LVpZdLt`ip_a#EY@|8jV#&(X^qu+|iJ8?WgujOULBU4k!7@ zxY$1zPs9cN>WFBdsh*eho_4|C=>M2Z5I%TA-ou}uek6}9d7&|0OuP&A#ZR#^pWlP> z9*Y5(bSMp)S!=l0vtBOw64C|_*Y0G>CsDU)d;48GIy!KLz|2luAequw?f~F-<%SZV zo3(7p8KVPzo5p)4ZwSe`P?+O`{$HPqUpP6llV?mi3u|_|*5*jT$;`&0PJ73cea>G@ zm4CB__(A075q+^HI^>h`bade+&yAVf=~w97HA!H?)Z8x@!yw$( zx1t2`F@SDSzr*)8Q;zB%it(fz_j)D&aXZ(HX=lJHs`AfK=2hf- z)%eT))B91va?BbXC}EOY^7r6ww`|AV{muX`&DJcj#bl52o3%7a?5RwT>|p1<-97%m z?%ep1?RD=eySv5-h39)HVAvTjmYI$Sn%@~9-e}rVy;2^yP61P8$j+ETb&NcJTkWAS z9N7)cBR;%y+ul{#b6-Gf^u)R-0!9xN?-RxK)Q0vf-51c(Z#32Z*cot|zTL|(+C;@( z$3M399e|Z660Qv3s7rPR?D;MM?hIg(d@xdde1SUysOOjEd$n$W zuIl4D)b*cr{dd%7umCcw;VjtQy* z^=lpK=I`5`0j1@d*zOEi-+t=q=XkT^ZH!&uA|KRpK{D z!zv;UCd;b`|7Gv}p{Oo>&$BaN9nD6=luvxm1kD}aTaqTm4Wwym#7ai$7-TZd!Swo5 zDid&k_w@97*fQ;!ywl#)t*3C9&Yh;-%i-$Mz2ntb?XebuTF)#4z`V zs=pc(HSitZxM_z6hnfh^?BeXqik)-}7Ik$IQGcuTd68H-`BJgr%A}O1^;q`pAa(|T zW&U8DKNkirx>t!l023_wL9EY|ZRI}%MAhfTf5yse>eCAHi(+N!r@rNf+r$MOib-|r zipf9O*#VR4D$kf8nLJ-kC9nEX=do{h2E15qyQTb#a=}PtnC!Hz^!us@2&iOFD`&B% zcd}S*c};LW{5sTq|MRxrRe0Gu1L$AZ;e~(yhV}1xRu&QmCcF%jwHr6M0N3p1O|zp0 zXaCPMMqSvTf3B{gFphDa79%mpC)Q|A#5fOC1JiDRwE8(+9t?9kY7G2+l7Tpp70@nL zRI!k=!?BoASA6F-a)ki9F=y#wVA1D|ef2@G$CM-MWKhIw?A6PZjobO>gEM0?BFdC6 z-d5B<5so8{SOt$j+l9LdMc366f5}*!DUEKj1W0kP^DpNd&`ug-;TO1H1qNTSD~?3u zS-0DKp25=x28kI~VDlN}K30PtM^tVY+z={Mm^ zSgllu|C#10D@|4k?p;uRu+tH#ex~nj(w9Jb1Nj>}+UP@?+zp{G2EN)}`Rqyok^ab0 z9-jBAM>72QpqV0&7xuB@^zs*_zAO5tvV1DfRSLJ6DqDmBVFKcW$6f^Pf$07&1^vk+ z;TTsHtmS*SCkM|{56Alon~^V~roK@rwB4Np+uu31wbIc2n{8 z)C!u7zT6ehx&0;d`txUfK=UbMkT)X0B z*&3fUl~2m6v?G8^$16L7?H2B6<6#VNd zQU|c~y`Z}H+nQf5a}SE+j#d%Bfr%__(GNGk7!&fmpm5`T?AIl}f0_Fqi#FXEFmj&z zs!Xy<%igKdY^eNHxGMQcAai>q&qeV01;n$={oQ@v#ez(()9Z@INqlt^xv%Q;*WWy} z{i7qhdHa^%EdUQki{!V*D&tmpXT@cmi}4`rG*I42&xG*-4p-T;nw|M|C=?e8f&O@4 zUp@KSe*eYC_Sx58+G+p9CgS}knhPLohyQ7-@Jhc=dJ$Q0Pp${)hkJ zf3Uy!i@%sR!p}edybQG(o}mg)+9{w&FOvv50+a_J8aD)@GHu$~Z}D<5n_g{*o&PD>Q?;sJEb^xab-8Z zjiKlge9{q&N0@rwC$ldR<;v()i1r-)Q&70In(55rs$2CrnCYr}_+f_sbrJRJx~RKA zrY?OKHDd|=U)0s8XF*`9Jcwtny528d)+f#dR!+^IQ@u*{3=}m>n>Nkg7mc`pdKKzc zX7x9mjPKiJ{jH8s)p`ozx$5qwUm(32b@|VDzX>+x4{DSd)W`2L>Q)BU;YP1;Wi#i@ zcQ_YP!=nZ@4ty{LY*U}ipne(6cYE0An&51@G z@nVgM>f}`YM&sPFR^RgMiH%#|*f4u&{Y+-#iA}N-jXWb8<#$vEn^rViHnFz#i>93y zEj!Cw)}MB4(A=}rylGE|CYss#q@gi46BDa`MeptO*_kKCTxpp)^NtW(W5Se))$5<#>#8eb%mwc$MI~pb{;u1%=df$MPJ3yd)xsalRJFUYWkMORppI-gZvqdG+|>m zz&>#jzGF&_%$~+_*=I>e-E0=t>&!I4HQPI!$}FtAn~RxNIxSaBf0=QkU^ zY8oMG*9Q9TXJ=!3_~^tQK0LM4^O4f2c-tL~T^&1jVRxlZ*7x~@|(;3kU7GXCyP zPh*TMr4n;ihUFPF{m!QJUX{X)-viMnR{Ka$a8t9e%AfZm&Z=LyO>aH6$x!*GD%UP{ zZKrW)d)W=^O!uud*|UT0ExUW`fjxNZeLFh7trBRu;G;hr`DF0qkX<$EN7Wi8jY4fi zldndeZqCRsRo?QW?xJ{|vg2i%cB*is)_-{Nr}p6f9ec2&-?f2i?Wtr$${oo)eR)96`Sb-SgyzBBoAn~Yla|NUQnYya7Q{C}|VVBdP} z+len%ym@gUQ<=*OYQ{=#x}4^ z)7&;d&BnZ1H1c%kka_|);U@vlu6lHZrJnWY^5X0=jO=;2GQCT`*TXYZmgno7d zY+62T7Tc^r)Sqho2udF7>tEgP*VWHDY`QaGQ*64kpl)YSJ=T|B9X4H=o!4A|TUS3f zUzuH6u8F6A|C{+DUKaN5?d^HpMgW6aV-;rxRKpzu4 z3;9i*!A>2Dets1S&2I=xIRwu`e8huUS3cYaKv;i2PrU4KIJQqd`P6>>```KQfP*`? z?H~WeU)X~We`Jp?&TJqauCps{P4lFzpng|)VrC=a>r%Rv9vA$V{uRIEKNBCdCvT0E zN(WNC7U|Vo2st84HHX829Ukvl)@|D9#WOn{U0Ay-j% ze860T$XJN*Q3-gaa-j7=sS!7xqa+|4g}m(dolH((hNx&27OSR&9OfS;HQnTCW%AQ z*ha;Lji*DIxy-`2qb8rVET6Vz_AGC3!g(j1YhSed%>Pl|5Q)(iU(2z1lkwD##e*M% zuGYIW7FFFy`+TG--$|67gYm~iS?-Deo)rc1b3d|A54f|^pNn>fd@n}{DPbO7U(4_K z$l4&knDnK5gIu7Ei`-dF#HIh~$hD>)bx%oE)Bj-V_2VkP1Tf7MI@BK##5 zpD)w29E)FYeN?|SC{TS~<-aLjbo{RasQXnce)W|+DZ}Cxef+X~`l00A7F)c|;8<_? z2;_EG! zBZi2(`pys^#xaW4Cp>od`Meb27tLk#x?|ZlEfRGJT6C*ESE(BB7VA;Xw@qkWTy=iy5QF|I z+T!(w3+7GCVWT59Qf7J9Jq#;%0dW5L&Eo@m_pLYV-3RyV=FzUTv)rbWzU7k(KN5!H zby&H~Jpg$_lez_)Z;etjxs`Q2 zv9BB@l$0Q|DQC9JuJ1;E&iy?ad5PNH$C?nZf}5QHeer*z$=HRt?09OnS;a4gzo~J! z!7(VYqk!E&^p7YCnl>5FY%m;aGN72Vj-TVt>i@iG=^L9i()Y6K4;qde_T;2*pMU+t ze*5v~_UV^j+SiXB+v$ZEb>%aI^vuucQTt;xcG(6!7i7P(a!B@cELaM|v-7&jNG3Wk z{#7O)INzYMhmvsnvhN3k3q=5gAiGL)33W+z{!va<0%6vn8h#a3{R36^Fjx66+N+e0 z3u~&ZyX~I%EOv#+T`t|;t{om8+dJ>SZ+GwB^#vU$p2o_1j;>M=U#*pd_vC9Tx8P~q z-IW7+MmfOBFBAcU!HeS!*a9j)CV_shgV+4z=Erc!tx)S`;+NvOtQ-DYYD4KaiMDhr z5%%~_5Mdzd4CNpGQAeV_1c4ML_yv}w=;LR4p0|<9d`H?Fy9iSnQXCFfRF-gi<-HA% zekYlW6z*Xz(jNj5&tlx+{(XjudJf+KR3hw=2h`|lzHrHW*g@5=N?UBP#j6X1kc=aY zkBiEH5SnhW#VQ1kfeF6~kkhglJcRJ;h_E3551u#b9rf_LAku&mAe0N#V`Rr1RgavS zFcClXepA5bvGWBYKZ6Ksj2we4bvCeMKQ2Rrf@y+TfNNsny-Cx{@8x?t6$m2 zAAhVl#zU8PGuMeZfghQUf&o4seowq;GB3y03P<+xL86%0eEs#;t_+|<;iD+%s3_}@ z7}QJVlMkmNagG@plfVD_zqeoi`q!ReC>$tQ!bPEP@xw;cA1F|Dt0M&L`tL&aICGZi zQaM$!y+{?*3llYQebwoZt4+WO_t)lNcQr-AA@$F%*qb=${8@fI%%k%F-Tl}yw zp0&j|a+W-+lsR)>wQ82ej@?e%ZXE2|-CM`@=Dizs`{se|bX0G|NJ1^nHAg_ry*X2k zGwItjyRb>~nT6?a5{5TEboC?K}Pa<)FFu9Ty5Q5E49bpTrA2d)rDUX|?- zq;`Rw@X%%bN@2uomY|L6(@NkTewShX5LouDRktbymbqOQ%i>z*_I(Fc5>&sKzC0ak znkcmmwV#Sx9c{727OyTiPMmQB83!`8Xtyz*Y_Y{UT=EZzPynD{die06-#PJ{-~47R zA=3>aJV#ccARsPe$#o!Hm=HWOa$%HPvGV|Vay4GkOdY4*ZwiiTbp-&6Mz~)IKGKx| z;_(~e13U6<7MhdEg_9Ncnm!l%>g=KY`pe(hXJ39{U+ddR-*7Tce4S#%gunM^Q6cg) zm*cdUJGZ}5EtG`Pi6Fe^I3J$T!0;haQ0ov{8osw)GHqK6L)OuzE z(YSkIqt4idJ+nc(W&LK)2HCM)*lnjL#i2be_U*}J$DWM4qK-YAbnH}|>qXwS!K7v5 zylIn}Mw_X4HFhqb2te+w`p0UO0)}{jQEf0rin^Vib=o~^_jWYll)a0&W9`na+ff3{ zn&OiEyncu+v@)}f+nb%PHCsKA#$Cmg>A9_V+Du**XU1yq=A}ZQQO4oQgp9L9*=N8m z0@AUk#Pw`An2EnUw=ceUW?y`BVV`_;Zom8dseSypo*$mtv%VPdhJJVF&?b5}N5Q~F zx#9s>=`+=sUYPRK??yn#EAkAf*p)X8+5IS>S-KpVu$(jR_EL$ntWT&C`MQeq$MfFv zUt@8VknKWs{?*@FHm1~}8un#SD^uN2S!FYo{j`;c^3GVmq57-59~47Pv@|(`UsAi` zsQX-baxodGq|z#`DHAs@yY!s$SfYxxvar>{hsXzL!w)-5)0F*wlGA!Hze19r4HMLT4bV;S4-?>`sC5Ug#UnkJieSf zphkyM06V5~$tm(_6>YJ_7OyUl)d9v2+ACuXU@V|7++vG$fXArz^VBC40bhLag)b1t zTt~=wKl$Vn``zz;=fpG01mwKLU5CW8T!LrnavT$cot+0L1fp)oIKTMrb-X+4L8CideyNk&sR}k zncph} zd$$klc(1MTV{Ehh%%+obYfLXR){HfNjKqK@Ce)7z%EVYUPi@Su01?W7LAP)H_Q=jP zj+|>uIi2m;(_+s~CI|L(d~8pOeS4Je*`vv>J)ZRJS>Cg=e8>9J9UIt=jjU^v2HVFw zVn)lA#s~pX2uu)~LNKgpEK1Wy1~djLjgf6J3?S%dl~6-{0vCv(2q15YToVL#0C4#%f@LnB)%(PvFLZ|9nfgj!?)g~~ zi(^6<3KSL_CXe1*-m43M_M5g=*NBL7nEFWmA>WMER%k?RNHUfA6N|BnP(B zJFxy>WEcH`U&_Yr4uqLp+Bj-VZJ@Hq8--8YlBm8^1VAb~FG~~vC~Xk_mkNNS6i^jI zDWJ0P-2tjCs%?5F?b_kqj#-BKVWhZ-Hz^zRCzS<7DXNywGK%t#IuLn2=K-8o{5Fq} zo@uY-lLF031%TTT{=@l}{&2mtY0Ww>e;Z+t|C}H{C&6c?f4Fh0`mKSgTa^OK+^&md zaV>NEK7%6lVijBwP}(tR4I%Uodpw7^j<(ohi&q?e+BKY^!{(A1nWc5F78b4O~yJ7&l-uI)4~Wsi<6*}h_IE_PdPX_0Yfp0#f^pILY{!PS zD@L|!)28@1R_?bD=C?KOBmpA30^q+~K%{ES(GduT6u<@MNRkjZB2W_7CR3x;EK^v_ zmO`cxb~tL-a6GgAm>s3lWO6Lg*lalAa24VZ1KjE=89T0AaKXGHo*Nim^^e;yC_(|WMibf+CZSk%8R%mQ8xky>W-2r23xpIQ?8Bb?6(%8?P z0j>n#tJU_M_&St=GggBm>{VH5f?%2qpcKd_Dyzv@zdvzB!2Eo9#(6OU@Vr%pfL8(X zGV)iGg`jBfYncUS97qN{m?Te4Hgn4tiO9RcjBPHiNGqyHf+nW8qMwE1yh<+C^B@OQ-X zW{B^tQn-h?Na6m6z+&7HZ&Brrla!Yxl+BdhmDgVf?W#n;`<`!FQ@oFMg zPcy!-kQb9@#)OdRZL!5F1b;$bAN3~B#rKwqB>3BPlz5Lc=qALW*2j*k?=Q{%m8|DLhHaNA<9(`ed``cgH zzx&lM>~BB*wS9T|jrFG^n}~npUI0vXSu?I8@TXn2dz#l&lmM;>KmowftC;$p%{j0? zAjn)01wckq0DR2zAPNsqSiFZKA(R4C4v6h1R64>^0fGtM;)jjs3_x@&;kIa2G51r$ zWraV`+&-CdL(m5++*OBx@SaIw&ZJ(1Hn81pT5qRoZTWG0k014;?f@aZ3;XGa#6ly$ zcYnp!QhaWg8(~xUif~`=B{PKnGo_EIEGr4ID_uOh@FCfivX@NtSeyS9Gbpearix{5 zuOs4{zYA603smh}JU=qEqD^QS7RzE;**tG~1yi$%ws^gPP&=JBnfh}V6wijf^1ss( zWkZci=VryJD*{^0v6w)v0=^KVc_M}rVWXHzxlgjOjhjOowTCunO{||y?9|4lP%_O< zrVV?Rx9zFu$+%~aM_oIc_Uyb6O*?iz>x#s4S=&a9j^gfG;Va`iE@(#);DUaK(kv#} z8DH$U=o^5K3~4Z9s1%dSDu2%Whtg{Opn-mY&NJ;?BEmR(qrJH5>sfb+(0C9n^D*;3;)m1l{RH|OI)E3%`rRjBH zqC^tUQ2DG0B9y5ds1Jgdqv|gTfhf}`-|90+^)1bj!Y%4cntaOvKC#TZOTsS+_{;sT ziWDVT>0a3>kiroWVMvolDgqU|yHn>JLzZx&k5dM*_PzF?$7n_15HvC0ho|fClp6RcW z#eUGybZqCt3w!wVq5bxYkL@>~{MJ7E<_kL?_02ls7R5WdLIo3EpERQYAiW(HIEly7 zbC~*=MWuIKla0g?3%Q>8_4Y8qetqTp4ra+f%Qit`}hCxe_-e5 z7angT(^N|VAr@gF>_-lg+%s#pI4(%(k;&0Q*xOA_T<7lWB2ZY;Ok3BlCPhFp_21o_ zif``5cPNdnAkc)C6^8t_y!D4~70F}`Pm`B<2S2&shVaSHE|$45DXZ4yZ`G|@EocL_F6ec6zKsOy;ZaR53-EwFWWJ#vm7Q&7aF~fT+`N@Raf@ z^T|GWpG?`xyiDd)1J^o4npaVj@r%N$_8ax3?x>!4H_UL4_t~LCd%Z4syDaPPA{O(9 zXQ*11E;wA`7xgC6xr!oxu1lL^Jwx?}`Hfc>sy=H00}9B8d6}1>{6^MR8LJKyBb!Yw ztlJpc{ad^C!P__Ooi`5cXur^S(N`bew^`%D^68nFOqqtDF}Ej!3mZ=RHj>{^G{`RO zqR~fHU}xeDzaCxKiGKSeZ`oPiwex(}E<}S#+lEEQPMU>{XNWIZwcirC3fuf76wyR~ zeD#XzSqQ`V7Sc}D9*mVP#v8szZ2_j$O~nBSp9GAA63aYQJ`h(fny8K!W4#yxeH0Jr zGGPRi9Glec?kbbX!=x18Tof4PPPgY52TNIj5>vyK* z(LlbsTyahFv41OLCc6PU8rQmF_Q%7?d_ooV1B!MN?L24^Qw09r5y{{AfJEN?D@#y{ z#Hyl9yg-#atja#(PQNJdJLPY2mZ?&su&IyB^xfVk@f!l)7=2Zh!j1aBD*b#TEAhi# zMfJJ*{vypLJ)4aicDQ%L-hcbY_U7Gpt=rsF1WcxO?R+ru`mBy#PU82})pFMsIlfIvvF=c#nVz<>nLgas(bft+_wMpjX$-cy`FWm ziTp+?igSJUGnMBv#dBt($y3W`eVh1svT8pf|0c!77~Gy>rg19rE$RcroF^u-iC?~oeI{`zq_WYYM*`j$liM6 zBO47+9PFsBDo#a8efJe_&NosnBDJ|0yL(7`Go3koT`Z1o0rF#!7J(bPcGqDsjzuC5 z*Zn?jn4lWY+k(jZH(@bMd{?-yg6r!xfQn!(NMC%*GD7hMNCx$2sy>fn3+Vr_PxTG@ z5LX89Cn*5*j3IFUiN{m6`)|d+#J!4%KA`INU8xSs-l-BtyRHLe7>IY`n;=!6wV)oX z18uyTKY{A+u0zY`d#e%guA=AtomHr*ezicsx-4Bmb@@lF-2@xAzvt+G)*%#XtFYL1 z7Kt{y%>8-kcfa@>yLIc9=QGcThll=~$k(vrwho)---|}|TbI$sVCUeHc%PT*>-Wn= z-T2XNrA6EDCCG5OwD&Ln@-OY)y?b7Vf_K61AN+%VU>|(&fyawK?@h(C5)K6b&nN_f z2O@rC$;Zbm>gf7HbALzmlXLb_ARq zpZ)$MEPmWAtTz?k!5s>H8GB^SMz^Ft65`#%#oJNGsIvC_mY~P3j+a zi+%CvEBl+j|6BXzZ+~S2@ya_#`_|gwNLcwR?ql&XN|Vfu6QR(3-b|m zk3Rp%H1_gM>3H(Y^YdKa{c6{qEw*@#pdrxb(!Qck#h^^1YTOx+jvs;OjG%ayUp0)o zUrtb#5eT!2Wp3BS^TfaE_i$fFKXgPMEX$Ks`LpQ0EZnMhUpMd_n^5e)xh@e$pc-#H zZ}G!MO!k2@tZmM(PYg2D?M$uH%tc}pyHh(pYTBI}UArao=zwwMT>bn7EU!ioQP#I{ zV_=i!(8jVCz1)h<#0J^O&KpBJolWdaD)QT|De!7 zC^nTjL;1lj046ia06lZ*zaJZ@yy~>YKPa!#4v;kA38V=~qIiBTEa_*K^+DK!s?UK{ z{)_I5SmwSe>?(ZM@PTI0wcXaC-8{T!cW%CEw~p`I(cx{|=^e>eWvsHMMtHrZPKzeZ zspTR}-xVOrvx(}(MD+{h2P-6Lx4BI;=}boiq3lt6%vF0-9}hY`yLE76U6oNw?_?@x zc8R1G!~{`wkE4Rrwjp>qYA0pt3t$koE3Uj0`ZEEJegZ^(Q@^8*Ls36s@=Baeia+s) zWj@ZzcA-?Iod7bG7pi@7OYKm(M@aXZ(;V2NOt6=J9wx$FugqR2RNG=upz61XWp1w` z7W+MflUM9A7yaVP>I9ivD6h&ovx>IZVv8-luYgB^4`JSeq5#4EojZ5zjW^z~x88co z{^U>o#D4a(pZRkxK8QO6FxfFccoYCUM?Ap`(RWt)rI!U3ETIr|5?|!Xb2ssA*y-uH zc*xw^S=+kpp5}QS%?Dc6ZnkZ&!>-kqFR<}N2`tdj`@9=tEpry%LtJQ zj6y+ny%+Zi_`C8;_XI$SkN1>-WQH5z!VfdK$Gd3)n8^ExlH$4QUnO-nOWnUa=|cp} zb@V)8meCd|-@<$zdY-Tm=5@#7cP&yd512t$!w|ULdZvbfZ+?G9)ezL zq;X+jJMFREK4{q6_YdvexAyJct+pNPuwMU6T;ZwZjWa9k!bXjA8!J3(|NAHdb_yGJ za_cuHc2|m?#GL zZh7kW5fC#@`>}%EmUUZ91QZYXw_;Tp2(uQRFr^doImyehG^_nq5D0Twp9vy;)$q%x z4%Kkg_p0vePz>R@_U&l*j@{V1Wk+_?cC$nAM_rXcs&k>-ny3J& zs32@80t${0QagfJ^~|mSE`jElpxGq1ygxK5;cl~Mx7#oiP*r-Y6Zb$~N)5obZybe0StK3d67mJPr}>EX%9QXPK&j z`f)u&R6LfmpcDwjK)gr%*i(2XcUyd}hW}xp+9scuBK+%u)YB==W$}hEV*V_u`axTy zGTwx?*kX$>k*ioA>PY(Jkj28)MB!#^S&fS?&X_N{q5w+5K!4A7fqE*o*kX%~;j8|m;i(a0`ifsomSv6Uk=zi{Ytl!@ zhQPj=s4Y860Ep{Id{=<%9l0~R$9tvX}1=7j81W zFDWSm^vm2{9Hl(FE^V*WYG%jpB>)UX4p(hjq zBOB}8ev4fJBYRd%?CE4?PbN(}nRM;6*tP!j$oj>B4U2uf#|619#evwna3Q$Oh9z;~ z=|~K$$c33abM`p`a)oV(@fIO$uhRSo8np!%Ai<>1IA#K79f5}!T~XnZq@)1w9RWcI z{#(12l}Z83ti^WOp6p%U6~H|M?5RWcKbb03qLK2E3xq?!%~*s&gY-_77ZBf&u`0WT zFgER~gYl+a>J2B3*@QCx)`|SmH=_t(V;i0KZG17XOl7|#j*pws{HVIA!gxIpsXgV2m&=2x zlTaZS-*vzp64aYq?PIchX8_;rV^gU#jJ$`UUW7s*+?SI$S|{FzyKP@m?955r?IpR; zpM1vz;U`oT0(1NK8_U{a)vbjK~$t4 zI+m4rmA2Soi!FYr2;POhaB=PfJ$m%W{ZR_+?d`e3Anp#}_#YGjdAU#m5Fd#6UN+bf zFmr_fM~#Zf_Z^ol@r2^HrY(E(&Rh2GTkqLN?|fwM-G9f9caE%`H*MBe+C>~m>UpC1 z14o#0L?7cVy9MITfKUSXf-87Jna&$RDH&UAvBjo9K;RR0nd+0&oYMqZ&98J*Q!h;f z@N`Bln9n$)j8%S_3-(bGv=x9m0$BO)LVOqCqXdvYcKLNHLVgqkoaui_rIJDMB)ifh z_f|Xnlot0_chgpfp!j042!$50>UKFXd^M?>)@AfV$FjVtx@}6YJF0c1j+V6#+Vmz= z&C7_h>bAuX8?mw%=5>(~#@@1XJLrt<&drv+eRt2^xYM)4ju^%1i4FQ+Sz~rCCiBAB z6);Bp-x%ue&<3-iozDhx<&FT%v7OBdJDWD`Y|^ol$*!G__Ut0xw*kt4DLVr?Hkl#j zp1E**rgt*MQzcW}PBV_Y;XMCRAy5i67s=1W7p3#i#oUVcPMBQIo97vYfGY)HT@fO( zLRrLx#Eq;wC(GJSjnWi1tZ*n0P$rm@uk_ZR9Hl@Z#@U7MFwjbiz6qs;AIaiM0NFKG zas*$dvD1HAafKj@G-W6ZMAjI|FDV6@>?lB>ub7q6Wa@V_C4i%1&`KZ-ZcG%Xn0Vvd z7ymjYCo-L9DD=B}SLD+Lx#34Hs3y2_0Sci}Om3j6TP^5g%D$$Kmi13nTIL`9Wz{V} z`l{~Bs1D2CsZt$|_HNqE{X4ePIk0?^*~Mt6wxv9zC^(XedgpbIT&Jd>1W-Li5kP&B zD|I)Ya;y}WxT#&D;F%RCUS8 zj~yxn{t${RDs%<$%~1|e9WIZMTr3Ne02RAx@}*)x#It&zgcZNz0{=jzEUvhJzfo0Z`@( zAWxd@mc@~>ag0!vPz*S4?r&_d#TFZbX;E}Utp0aX&3Zn$632_l)Cset*5{2?76kLL zOCW^)>;yoV-$Gfy3jWd$rGei=puPe({F&>yeNHG1P%OkV7Y-{vez)?>yD~f+@dd>_ z0?XW97%6R=&=%{lEU&6=o6`3kAyla{9aXnYX<1$_bKByFiA7}q3?KC(w$0u=Y}&nB zJNCw%Ju!}L+iP&{_=y#xCzg+&Du#2L&bTmmAg0mP05+VZT><^sNFmScVv0&2x1r)4 z%sO)KS%0!)XX9Pp5irX4Y+UqgGHqKv<=7s?q6qoFtqf@B7v?lq1_ZG?K#aQj{h%>N zsj#ZW8UA$K3C9B^=3im>J(zpNsFy9BsY%=Lfz;S300TX91wq@%?-YQ|ovD3gNb@_^ zKm)D;EzajeCagscD%Iis-8b$2y|?W4jl0%u_B1=wN2%1B&92g` zdZa>jB><+rom}TG4BS!)uzEi!0;s=1IrVu$TU6Omm&e=CpcG> z0GRw{<(Wo7B>+(&qC$D<1b2&akQw2x*uTGsd{1STP<5-LR~__$0R;a6+^f&76eyqh zs#pKZ{y11x=2hBai!HYJp`v;OBK!zEPFxhskwJIw-gWoW(^J1ln4JI|4MceE3?N+0 zp#biHcf##u!sjj`mib^NW?a0LlXyDk6g96CZ+c_z*xtVNrhWLv`}UIuAKFhvy9fKe zBZ5nW+ue@lE8+p!0l>FG$PIA|cTq!j+EBGvi5&RF(Mt7x%}xLFGGu1k@IFc)cy zA2y<{g>ZnroXfG;7JKvNO?&sv+xE_zH|*X#eT7$4ZPYI*B_$=2iqc)u9nu|=(jhG! zGtvzz-6b6o(lOEvlF~!>FysKkz}$Ji@80_loVCtb&pyxI`&X0ZtB}UVrvas%a_hi{ zMW@$|yPGNA*SN~r>h?A?@4aXynT2PsmUkznE<>f0Z^T72Fs1{A**kb5 z@#IW>K=8ZbmN;|Q6s9ah#p|?IFiR2mqLCuCq(>lX!Lk9vB}hHi)ZVeFvzEzsnT#5PXVr^E$B4US6m_Y{{tG>vmkj{{UB$Vlt4M1IY zmnsHPeHrl$O!akL{y&xrkVK)sx^F%6zEjdiDnlH{I&9$_ueh_4_`{i<@hR$v^pH)H zwy18sS4-?Zwun9G)Kx{sK_4);I)^N8`g@W9hZXz1);*l?+CF}e&z2<%YP&-M@gRGX zH0X_01>*u_8rKlxo`3QnCL+p3?*c-j)_Z(xqaP#_dGyAksf1rNsD_jeztg7`<>!-5 zAI3)>V2m%%GZ)KBHClz5d~((!l+$ae6U5ZtVb(u5H`l*x%q6Q8uClb4wWg=^7|E621xGer zE~H_we_o(fEDq)#@53|t1)8rE42@jM8g*{&f5bF;=9qnKgBD|XeyP`GMcG5M>7|Ue z^@gX&PW9{YEl*3SKTn^b=l#Zl2u3C3C*Cy$QuRrKq3846KPro)cg4^9TxV*mvsSC| z13P_i716bCy9WJa<}(cb?=i$CC?GlSul^(7n^A=34?E401R$24VD898z<*GVk!8qU z@ZXDzhMZHPPvvOP%ZZ2Uj9vn4;_JrV=b?O_?D@E=wDk1bz4P6zIdI=Qjt0be+`8{H zY(W0Z@7CqlT$5?5+kG)Fw|-P>?m?RMw(0#;);?Kgyh7U$@ZJ*f?@GsZ@o*LR0Dfw{ zLQ@xMtIe7ix{e(tz`}cmd;}uFtJA=zFF^aSkrra+u9~TjIQZ#(XSWY-#dP;~JIN3u z5IpVSN-8UYGIqgR`eAt*(TST(`3?X?*;P89Kx@oR(!*i(M1(|`l)+q#&rO`XwzkyC z#_g+ZfHy`!yX1xZ9yq)x(T|}HwOM)pB2apr-`8O zgScUQ{#Vg^C6bD9`_H{e^+ge}(`$P0aoqvi!BU{Vk0frqZHF{nOk+H+!gLUA(U2sF`@fl5ea>`TXPMrH5s?!H=oJZcqPv7 zw_64<2$Av|NSG=x?rf`n-2V$}45jlUct~OBb^>1R+`6>hg90VyPl|OafT-!2X8G@s zuw#{OX+Z|8scm4NGa4fhQ{JCWs55e$#sg30i5_(y8{1im|)s_S|*0sP5iy0!G z4hE1&2QgeQNrkPWdF^bU3(C&i8NsBlTlIb5TY_gCntQMB)3_;^q_5?&ez{S_Em!7L z%VbwS8Y~^$ud>fsgdYc8aPMaZnyic_SK)bGTrTa1o?b|tlu?)&+@AN>oB;hCx_=t$ z)_-iOU*icfv`7!8{xPCi;tFvZH>v70>siciagA0B7n*@PNIyugPHogR-wG)^3JoMD zp4Plv)rKCxf2Yi}C+noB+f^72D)!J4D2OthN(WZ?itDZCR}M}-6E=LvCdZ_>S$d`D zw%k^qw4&yoyPUXK^muocd|K`vY^&_+xD#yao{(Rmlv@D-*ahs^G>>Wty#-c!N$OF& zTJ`@aX5g(KEmlRt<<8*wlfvl`md(#|B1rCv`*(k&THnDYGMiG1X;k?ZOAt#l2bbBU}y@(T1+`Zx$Y2etOLUmAn6 zhDz5~%oCxKJpTL)W>4`ENWHi?T-2;$-7T3I^evQr&{;6hLMktLSEhM z730dV4`1=G6|~49ta@Xdk|%7#`+|%|@P|qZcIRCOpTYu%=aCFi4u25Pr%vRQ zQ5RFV5;aK%nn1c%qanqG-<+J_h1jxz0hpM8G!xhTlfOFyJz!AQkkRw$^QY zN=q|kmhp3t*(nKxI0`my`IsjuA=;qS`q}1jA9;j?0~>y6<;PL!13BKG3Fa)<4e!{b zEAspIkZ=*(S?l4M7WFvVU=e5R1{(wQeX6g(*6~!>H?U%_ct<=JK-cqxE$>tO zP&byQqe2za_y?<6GZ3a?xxb zqQ*k@n@tFJVqZ^BmmPd~!7Ve1n&}?)+`Jf!@S6)m}}-J^8i+*pbK%C;9tp+svIZ}p1lbmKN-r0NAK?E?w^PwoPiv2 z^rQE)Um9)1B$6)kVnD$lqJ^#`!D!P3ce?b*>JEb)tP8qNAKN@k1*?tsTWAUHwb_5Z zDxDp;&rS$jfQg7cb98qHpKWxzLwg>2u55CP*tLj(_no-wdVuP;*OE?``{2?`x!w{S zcMiqxzO5vH?{65kC3ylv4T+~SW(y{qdm>c=s~{X9D5D{>n;hBs$>WDDO%bi86-ig= zcQyLoGC-uzhWfX@*muW5d!D+8QgAfr#+(DNYq&C4XpDGtHc6iuA8HgdaQY9Bu#Vp= z1Up>39Omi!#b@zzFv96{**acB21PdfTF4+ChmHk1r{p|~`WF)zRYT}!I0o(sSq0x) z$V!L|Ki?r5!HRQ>H09!33cizYu`4$YVYzG{A?;=*1FtiQSB;Tt7*50 zQq7sxD5@75>d+n5VDR;ZZJST{TU=*s!7~32IxDR8bE$*W3M;32S$f(?mE5vNO8qF0 zE^kGuJ}3nmf&%Z8)~-*hm2YH%0iF$O`_S)GKa4M4l202T?FRg~b$7=pQ35`2&fj>& zW~tg@pC?p1{D!Y7$s|-v-}15c$?MtH57W=triSV@IU2PYlk;Fo&Ai3=6%CEHxX?*n z#ax?Y5#UeI8s48*`@Nj4@uMSCm*35I8{?lvA_SQe2R;y$6Y~9&r_qS&Q5DTot21u< z<1PIA<3?+6uvN-dtOi`mHTYsau2&C5Mecw{T722I(MXW}O~oAg+OY=zgXgexpWaI1fAI_$VnAP1^wEzf#6Uf=!;Ad;YYkpA1rBd@E_8y;R z!>Uag|JDz17PH~$<)2(eG#!abk zfbWiCP;X5OT`NZ(V$s?(z9Wtr5_68eb^x7Ff|~~trN$qvZb7>=gwuFR-!Rr5I#7je zTM3mj&@86D$LCpz?lHaJ43MQyvtzhnWFzUL|LOjezG|>SKE92RpZ#y7>BpA*!;DfH z3fgytgPfdbAsQ3~;A?|iN`k>4 zO77FJ)y@`3bumq&jsVH%j046xM>=SyNT)~5aGnYLrBO(KKhh>qr0TYPgT&MJyR3Nq;GVFJcpb3nd=;4rB${7l4|216x%7Hke4>%NVu+O?Y%KU9SkDYj z=9&N}BZr0!Xq5@$M1m!{O5^{i4C~*BeAd-6sHiIc7{5;b=0-z6<4p)o3cSjCQMW)A z5NCN>A=PR?j3^<0e_!E_XU*eWtgo5zR(gV8vf5FPGrmdH#~7yh|3HPp=ww9#YA>Qh zI~pfRquECn-rr9ipD;rnY%xkkx7X8Ac9_0@SDTYJLcmgi=XKqFP!tkz zm%e^@W}+2rTEYW>Dtr+K+Mq6hivRs7TbD9fRj1(Qo7ZpP>KdyzPqmwtIT<%u<=Kx% z-Yk*+Z57fXc)zXL7ost7?WOF^_Ln92zQ)5S;<5NTANO@+el>pRHBlUnBpI<=T<5y# z*_GeHQAR<&q}gC?QdK~^h-YMr|6s373tsmp{gYWAM-&b5E&hqK+#o)?;c68$#q=|C znP1$SPoLI@Mmpv~o7)5m1)6bglTVeQ8%?Iek{p+MH1C;(9TQwxJ2HtN>d@TLV8d&O zQ<7+7inR;N+}c#RfSaS|s|skOh$)?wklcqUQRVY2A%c_U30NTEN%NQTbwfAt$?rGW zs(Op9-9wQOwlWf>I;Kp25?6M(KQEQ4A?rqO@JvOLDEiQWbD%#_1cOtj#4Ed8Up>YF zqxQ+^=RSKfXBdX$JGH_C?qzuxQfZ6RVzFEWtB>v0M$!Q)>RkpFS?Y&z;8rK86Uv4^ zG*un<&Ub{YV}h)AIfYf=#*6Nx9s=BTk9S`;DD3nu*cH_j84Jwze{ zbV%c#Yt8)+-$S(y+tKlYQkDf4e!l}H6D{nSF60G_y0Cl5G$ zerjmiseWRR@Za?79}4-<>yG8`+io0Bf&WWnbB5098M}2Ll=WJ|2;-2t^Fys>7YFB& z{#$@|?!Fo42P^o+CX5EQnRIyylMM3Msgo4xvT;A%s29(Z>|A)kppHN-TNNdXn?5S~ zY|5qlH7;KGDR0v%<0v2m?0Bnqz%jHxoppa9-N^J!3**jKm~St%o6GP+oEgH+S}=ZR>iv5!2%o>)7-HmeHRVS5zaX)TC*A)) zylr3Cv0WDVq!(?4Z|Kk=N5+DUXQzEcossLJ$4l!u=AA&l>9dXX)<=21j^z=!@bA#W zE`5w#O3a|_Tga$F+2I7UFLT|wTnLw-Hd4Y+TFUUiOwcsF`4!;eoR#6>oxV+Xza%zf zaYAsqDQ{{5)*-M8-ERSpy8aSs$p;9HYjM&@Uo;Sg@e!BNg}o+}t9a(9WzhRj{E3Sd z@$}Nz%k+b3k_{bs?xTX+ML)Z6HUw`^1(_!Z`_y$bq z?&<{YQ;l}MaBK%?fd*PY(SKiwxBnvfnHGU)9*pI5gQ{hW^zLN$lAu`1Jz7W3klp z-=%}nV*Ee&z#4h?;Spf}_KEU))xnbVKK+#p{>#UF-K#?*a(738sVQO z{9&-bB_XmnIGQU5-1A<2`$rIu=z95%>R-Gu=RR}9kMM&sA79_v_0GnHiaqmL8zM+<@)1jFXwZ&q=uw{o0 zQ9jQY0;#sUh$Mnm5sP6KduMQ_`VYIeDB@znwllYF23?Wd!nMJDsdjc*W6CTglo=m!N2sBSQv<(@-LG{3cH?H%?|m3To^#So^Vg; zIeHZ#LnROakADng#j1}6Ms%yPSyJIev=bRAk%o}C3)*?9Yk#SN+tO(ypq4d3zE_7m zl5NPIbKQF7Y1SUZ8{_s!!<->Ws8 ze~gBpoxYG^D`}birsAp*oaoQ@=v5ucFK0)8NjZ$g) z@wdjwH1s-L+@@j@ZIco=B}t8&(?%{u{}roE)l8T=nMxXF9NGd~Du>0e9b4*t78G9w zRZvXpWPgkbSw9W;84*i2C~JX!U-jzckjqCJiKZ}+z6`Sv6MRms4|;P!0c z!A23}xBu3<2#*WbcL#nY|LBy5-!J@YJ+&5T+`elM4I^W1j2Y`_oMn4=4ANA{JipxG(ZOU=qDb_vDbxno&Ju86%D{CUxcTG#17%lY z>MlOI$cIyY#YxR!zgGU_%^D?gj1ee`WGA-09QWOSK*dTjQu6F{Ij>tj=;SV`JLsgR z+wXxeIp9C2kLj!C(e?E_#M^p!c$mNQ3zxkf*>)MTT9%kVc8Bz5uZ*>Z;U+||m?1pv zENjA>+CAH>lh-2k^o~!|F3cQ$(G!S9PIxx$&SByBBz`$O4gQ`-gc*r8{UqL{Ced{Q z3JIywM4$|X9w>jYXOg(f@z9SS>zGTfE_QQ0z5H;C{kEv9!;ng>#ongbHfKJ-Y43^-YF?U1b=7+!ZR^m!zK)i= z1ATZ3QCrbB@Su+SS})J@>L=T5a}`5H)Rw7P{V|5s9=0m_2N+2Q_rr#>gn=IqP6Sel zl_TXs`CDA&@Hi7N?ni2Y=8-7mrLp|0YN}*{IFXb*u(1}ZX{Rwpl-b$QTUBjU0Z<%K zL!1qd*OKazYHQ}w3{{M7V3XDr}CD{Cor5@^uV`| z1e<7`446t&J24O*Od(WqAt7lT&*>%a$MW+fP)8hP)LY8`)j2m)J#yi_OmMt)+uPE3 zvAZ9n_l^Hc4K?h27$-dRQ9juGW4}EY^~!+}j7O>ZiO??LT>^z{9a;ry7Og>#Pmr0w z_MaO3TtY7M8jS%Hh`FTrHE*z0D_ExUWiM6EoxPq3+d`=4&n)gw8q1Tq|_Bhp+PdUhaP?mr+Z!)b- zUnwE5X7nZKKHd`1*BT-sU*%oD9S2Shv%ua+jDJ&)$(>#(cb*`ON4CYWb=R^KC|COC z=~M2`13E~5})wP^14DF+slZ}aLs4H{9!UfOnyGCVKgBF zcVo7@JtNCisPvPu&&67Ew({^WY%7{!xf9y+8D$_ajOTA8)bp0vRxkhyR>Q~{xql`v z=EM`58rYttk(qmJeuE)3sN1J-`HjVCS5)%YG(am{h?Il}G&4nVH!cPGEaL``GOVtJ zT8aCMhVC+eG>TO?+yWgd^|nSBrKdg+#l=}>=j8d0?;Ie^W^p5>w-zsDn`X(M(iXN5! zl4avc@WfKs&hDp~5lJ=G9Q6tZtEu#m0+2SQL#ExjMJ>g__wQS)HyBC_DhqV(@|vXF z%Y2U^ks8yn9^n`lWSrS}@Ra{dA^LG;_OMbCe!DD1P8(kGMlD{m{6x0fCx!r(| zxY2L4YF=rFJoRj>F07i1k3SezXiS)>s&TZ=xO@uVHVa;mVY4a!^TD$p%JzIOznVLN z<;`AvYv>mwKBeln;kTcM25PR2Qd8ZvB^#;A`pj(X+W5yTM8F#+=846W2+#vT@OB+RL`}DQZWJduDErWlBo2GbVj4la& zqQh7LUE4dEwCt89%XNU{D_g(RD7w}4_9F0d!zk|Fr(xfqhx`Mr0?8(pa?rnlhphFE z`#&&0=*mnljWE4^)h*mN5oBS>_S{#ikae@w04y*&Pjau|Cxi(GV z#x%V(cey(yG^#dwH`+V13Og@$iY?APO?J?BJ~Pg$byT#H*o=s|EIk5Gf_gZF^Xy^w3R6Dzl(-SNRXO7|XB^ zG~#Hv14b7Uh@#5d+>9%aK!-9BTUpo;UCD2dSwQ{2)fCZ&X{r0uG$;^6R;-7~CP0ey zZkxLF*+GlmN8{4RRq)f|)4u!D&=Umo*a~xhngn^i!@B+leEes0deJp_OM}9LEToro zBS;FS7{vmPN%F9!8{njVSogS37yb06nYhtPKT1NEsuc1t9eIH$eZsO9;F8S9pOl#H zWvU@8LxBae@^!gG$Jbf+rwKI1ChvH2j2>spvxY#+^-y)O{8`I9-8iO=qLL5cv0AnZ zR;0|a!OIOY4!Rc^S=&b73h6eo;~O4}kYd>qZBRT~X4;bmUv2I3fRmUG zgV{*8Eq@Mg`5U9T7t(h%y3U!Rji-FjW9`!~ z=q>(V)Wy`hy5*({TrA0&&%-h~I=Mq?c{JeH8o21_%SHA&)2)6yoU3aL+!G=nj zBMz-S-G&yuF#?R~I-W*ea~zu8Q~@~n(Bs4?_cnD`Y)^0O^e9DqOLQ~J}s7>-QF+Zu~46HR@ zCGGaPbq#_(J;0_OQQ2mzC@R^RMhF^Ne>$OZ&-CD`Qe8`^wOs8)o50rxj52C*%-Oid z%9Ryz#lN<@%Gh@7(=B6}<1M6KO<3c}O6;j`SVWzYR`mj5e#EEyTi@xR3`<0iLFPq; znW%3PG;D?2H$j-0Qa$5nhUa^~{(0OikhpYXXnG@aRKTA6qOw-zl0}oHG{DV|9jJE%%+Eu=aIHRk zNV*%c1DpAnDw+m^{-cWiMv;OS#OjTCs;2*yE^7XRB@xZ7qsLv%qzuCb|5+}768Sx) zISoM7!O}lVAcUXT_U(JOwR)z+@Da_hUtz=e+gS}9wj8LZZQZ)X%JnGG{fV&Na&5!e zni9vo67{9If2A6>89)NFQErLmJlpDzc1wm+F#B-I-1#$XGI;G#5gf$)xWOMt!6SSd zu#HZZ7F_7xB>Ik7`o42M*&#%k(+f68sSR)0oxUx*o&6Q8MUtXPf^EVzuZ@q!PMU@h z3Mo-e&ZUINsrRIBRK+`8DOJvU2DS1~ zD|`QCne=bTZh|-l3F2WHNzYA5axAGa&uhM9IYcvtjwHOl;HD$DvhEBT$Rfu-YTfY* zAQEuApq7)zGxxj#n``8RT?V8b`6$m9o#@gTF2vgHU+G4mu+xmhD1RyiTUvSRxgsCa z$aRUcrS4U6-vj&Uv$f?0Cdv1H_Cv3b!*hBM_TFxm8r-KjxoY7wnnmPax%HbLva=gn zM2%SDJ(5ai3298nd6?-<9mE>k0(vC5irAEz)|Cp^_eRSU?fZl6%c;o3PqZK|BF!j^ zMa7NZGc})ghLX0|ZyHFdEBy=1U;OJAk#2;#19=?F#l_G^Yf9v(xF<{?S$K zAB-MBk2!_T+`4U;d)WZoW0uUQ4cLOR~3r+-TQY#Bto0CZ{A+}0aoBq~B_x>74RxbC^9(A~I=y|BjF8)$s@XFA)l|0P z9=@KH9j;b>!BN!#7L?~8gr>@02MuLtZ9c6uHp4MmmZSN26tww~VIMGX~C zaHDWAFE3{*s*npJfy6nLB`t~b7rmJ1cZ5S%Ts`2J%P6B*Q7qrJD_uMit11NXAG&+G zYNQVSIX#pSB%c(WK&VI_@AZ8Kn?Ws?WUDeLzG87WgWz&occh>qB$5Qy*(ufEf1HE( z2qBE(N{ZM!w@NUf5SCz=EwaN;{Ez5Unt#^QM zgU5MHG2$_a;}C-8O+J_IMe((_;+E_gBdZm^NEKc!1U3Gbsl=|oeL4Z1CUC`qF$T; z+p|84Qb$nrpm`b@NfyHxy{EV5#9*?Y5cKv?tl1wxG)xbN+X{Zqhoy0QD z^7Qv@&H4&O5$>VW+HT)M-DKJByD_xH8Wh!<0#i}VQ&@FS#y;hZ-xxs}AE*>O^DEW~ z)l;0RQ#Dla7<_zBBJo8~UD?J-+w{IJl&(p2YabJ8qT5qbN!WOy<*x zKMJo4g>~=tdM|av*~;Y8mj5u@RJae??)C-yH?-hmhf4T;o*>V+Y4&QK>`Oyed9D3? zIJ?o#x2?$mr;5S6w2)7cErX+bOn$q714}#KTvKN5m@5k|L=m+bnp}&h>*+R$#{AAR zL;o+V6D=4A?Iw**Hkf*hb2&?WEdL966rj9FY*4YE?6O3pHP^d|iP6RgO`JV7zN$4g zby60d#bH0#!?wL@G;@+<2X35j{clCJ!!*=?GFw&w!}dYFtgpF*xcEPmy%$ZZ+v+N` z+ua>>l}|?x{;eX_JglWfE@$&?=(~N&j`nPw-cYj>H$d4c%+Iz9BSFAmW&459_OmQs z25vr`wsLqzFGJk<$d2*Pcozr^6@VJ;LbyzOu{n)lu@)2U=TUC4w>|yl$q}db{e}8V ze3hEg7F!XaNldcGRvHkI(GPY8kYf=}|VbE4{s;ej?9J?n;~#4yQH0 z{%3{?%K`ta^|%AwZUn&`fG`J5TEc-Tw3gw)GmP!$rD0Wd@3y+if{H0qOoX%}?nk?? zISP0l_s&uyu5s^4|2||Poex!T3nFg65nPWu5OY)wz3yMd#}A!axEq98|Rk=yPp zC*Aqo;KPO??4}%LNpY#OrK!4)e2|C8-h;vRJPo+7Zo=tD8)pYdl)1OK@L0!}SMQ6G z_ISH$TP9anG4IkUg%yh;4&(Ij~;_E3GuM3`s zTHx7)nNc&|q8UINrP!wre7|pZTyj?J6YArnXT05#rot)@9E4ON&Yi4SK5qYl zq-aTb7IE^EC*f^B_Z#}W%l$zsgaNnjgoFw_ygr(<5m1#3C80U4 zkWW`TR5%u)IXVMao8C#GVSczr; zh=3TrYQ9TFGYbm~3+)IDTrpZ-AXfp-%4E*|$oB+Y_tW=%VYbsO6=x0$Ebs^_M~nO` zMOcrr1t+*lX+#5#fJ~unx?eqBEzQM+Jf?5&+@AI`gxKDmbvdmo zX?-m3GNgWIhl(K~#sBK%fEFN)iUISK9Qy*M<~5{gs~`2>4SVwbnE}w-B0YOAqQ)>7 ziqd*bx4Z-8mg}x;X6$aN;zuq%T<(Od*ph;niW9oc$PhXDJR?Xs(9W&;2r4*`<(_M! z(?veid1JnhLLV2oQ0b_fMgDHy@|1l?v#KOtIPoA7p3wB9CoUS|SnfcaRtmScQMqCY zTYC5XhsBSL!QFC1`}OSs`~pOD0jWOp8E$m{_+JNOinx#^ZozYnbGFo0MhVIO4JMlU zaei(QqR(C3abW4`_e7pAopoQNOZuNDJ>HcRtUy-%T;Jwj&Y@BSz=(Z6*bNof@pRI) zweb8*qu;{DqGU{2GV0?^RK@YG~=IB^(E2Vgz`r0(XsBfvu2*HcOF~{ zp_)G&>0`1j(eL4rTWvV*3c0<~=xeg`-9{x(z5TV!v!`z@2tC!>+UuwMuZ~S;)%@^9Q6slvI9q}Jsf>eq zR`{Kd^3_z?psKW)pi`W1W($GUutp+%`D{|F__@(DlY4*59xu-R3||fTz2OwG4}Ki| zW0OF|lx6<{6_db^31J}FXr>fl700LXWXnsE2&3qJtqunjwnYB^^_>zr7V(Ha46;PK z;9LF`@|hV+Dxb&cvdv6%?Z*wphxh^Yi5$RB&d)qT(*li?D$|Hzi}X)N<$5V*G?JJb}!Yxps!N$5L=sAFrrd7d0v?@uDW_& zuMYS&Hmv`rv0Rm01zSblMcxcMEEXi41`9U`+`t^F{*@mm^XP}-RQ1?!GcK}d&WkBu zGE853uf;y?!OKa;tjN(xZn1Y4Nre<$A7RVCZSEDI2`s`9y^Bl2`Mkn*hJwLP?be1b zzw5FeJ3T*)Eh4u}^+^L!NIs$0S!#^!$ zbjOeS)4=Qo=!7%rl`ON@`1C-3cVlRw0=g!=dUw}JiQ-SL&&j%ebX_ZlJGp>;0Oa=O zcIoikU80@*_o98V?z@VJu^17cgNT4I{;k1Nu7MUR^RrX-Ke-vjPg#iw9trIpUwzADzhp>lC-G_T zV=Dym9%%ajp{Z(h?R@!Xr&7vR+}SkiILPX8jZjF=#Isi!QL0{U4i2dJ zHchk9Kln8hM%K-o@)sq=hYraG`jHx5KWC>5OY7a3;%7cC z%67|REQ{Kmd2wKg&wwHXUA5}-T*pDDXf&UScNTh400KL-8^$D_%RDSq@b3?MAWru} z#Rze`Xi?{;FOd`ur*6wSiStb>_b!WitB$K1Q{O27R$nh$YGu^O4dC6;;$_LEEfoOz;6Wj|MvZ5I0*UE9n(>gN8Tcx$dzsDcAH1Uis)7BIs5 zi&G;XVH*5??Y&|(^P>;w%1h1ti&@FNMX1vCtgoc{=T{!v)U)mp-N*a*mxR10o;7a? zjDA>W!#CVoYF6D=HCsPRKVGc**880Xn;;Q=N>m|Mz4z`p8JIz7{hk z3kRvVMN`YZJ9T{L0PxJ)+?n&NU}dClM$oBdeGskz$JOAnIN)5 zbBidM9sJI_)L#(SF?dUr5?f|jB~H5)4m+n2`o;r7%qFA5xg-o>J8g}>Rw%sqa~(G^1=eSA2jsntC_vdXuOq5jG@ zvu%d%ZO~<9R4?Ic64;&mj=Q67%@8Mh(i>iV z+(}$B^%{1mnrc$}N-;J)WbMropvzw0@ljo<`scFq%KVbzg96*8a*W{0E6V{v@mSA) zO_Q1j0cMlV3=Q)=FRy+CHCw8bb@CtLj&kXs1+CkDd+LU3GOo#GQh6GU>a+m;^oTRo z$gJF(+m%P;e?Ij+>iYl9^d1*Hl-05NsikYllw$K>JJ-qAx6}W=v@MRg&wDu~BR2+1 z4$iSHAvN3httG%+!W0yg*7k3v#u$u@YQ!eVzr-bTPJaXnO+hauzLbvKfE|8B@fVi* zuQW|`)Yh$wb=kSE2Yqti2pRTmV%pOm=jO&2hknUT-hT#>Y!`ABoO1p9pajA4L5urZ z#DR`K1@)V9b~$jE))hT25D{&DefCZ}o1oNOk=Ie`;?hCU_QjIk6dR`>{+j5lgf;Y! zo70a#&L{23mF(;op(R&Fz-94c>E)+lFipBbCs%9viQkY-+GA=SOLoq8&3n?QYpWGO z4L8|cmDCx2&M4~E!Ep9Gjpm~Sah@89vp8t3uL~&XFa$$}nwJs;zaF(gH8NF*IogI{ zGgo`asZ!;0|DDybuS5KHUuVk`Tn|o8-06^%h&lFoyemr|J2Y27z9j{x)GxVpsCycE z&XyeqW|`2~*SkjpsC!&3|0e<7Mt6*%NS~Oe6u?{7O&DPsdNPkDg63QNb%!K4tz7je z7_)OLUqZrD@v*zp4-$S0ZpCr$+1uitnhpuw^A|q%{}#Cz>aKQC*>l-xJ+PLn*vXk7N6lLrY`|cd#Loyn##WSBQe?$^as4CzJMyB#o`B6+ zr_S38n8^_Rad)i0F2@q^m?rczj@$<2BiAZC-H^wYkJSOYwnJM_MUnxqfyhIj31hnB zXY#M4FpLe&nLJAC*@E$@BC#0F2f|g}6_Tj1IEf!x@b{0`vk4g8J~mI--#^aa**pua zLcR%g-m|>!uhCqzc=iEv52H9C3~lc>QG-`DdTo>8(%nD;;R8DS2hCBrIs7v z&`DDL)Ud5tFPt-tBXT7@MBN> znH3Md;pZ`paIxu%XJ(nfZ?chj{4U#6D@g;{@M zz9+}-(1YF}83?S8-123vjze4Kcc3TZf@UTenjhuc8wJOjR152#0whg52rzt(81_!aSvJZa4cXRAaH%QRs-|;bsJWB{+p72Sfe{(N!gED`z3>Nf+ zK5^r=(yM;w*D4&Lx@1cn^~x>}n)wNMTAgj7^||@AEeferp;-Cx(dAJBKSeo8I z>WQzk+ff~~Ge`QlkPE&tE$D&LaRWiC|cMsvexl_m*dk5ZRQ z2Y!+cy48ZTeX$)@-KiruFQ~{1vD%4UNnAO4nnJFgP(XNCkEw74#_VV4AJxOgG?ue> zYTCH|Doxuqndo+woi$4BPFeXq>{>L zB&54TVw7}@7%8QsN_Tg6hcu%^7!9L4q+_r>`#sP5{=+}x9M0j~yY6pYpUZLefN+}U z=!L>uCWL3XscgxjWVv}V?!x(QKmvZza&uk4CkR57ia}QJ6Uhd3#4bG?_GF7Brpv0M zR_fx%i4XBj1>z;J>?3-P?2*<6Ogrk%%wN~H@ zrmH!DlM@lFjBJYElv*c%2#{*n!iGE~+3GKUAl*UHkujzWpY%3;kIpz}Q9*^XZ>-D& zg?Dm3Sh~``I6~xiRX;&3dcy(;50|EjIkLr@6B5WJ1JLt$uPO8RWK6NzN34I4PRCnm zx!}sS=kCtf!pi5Rb48Ig?U89sygfnF#2?{NV&;Y4hn~>9Xjrm3Bk32luDyLDub!XW zY5t_ktxNMSurn=&Z9IN#{8Z$NFljg45ZRtGl}3HEfyM9Qd;@oFIS!M5FJaZ4AcTsZ zu8W+SJRZFd54gM=FzSHc+&pJQEz)m1j!sV&S?`%`0TOF1oz&w;7$^hve7q!GGVHjs z5%;q0nRbskZzpwp^D zIB@oJe%rh+%W8vwPv`JdA*F7%TEtFk>b(bA?S=M)yDpabTggZG0);hsbhGM7~jKuQI50^y-!e` z3l7G~FB*g0NJD)|Ghwr4ekRykuy6pfhzrvpEY0h&ztMVVZ!x!N?_`PhxqE&j6)#!-KQ%?rXl!U1n0)wjO33#lZlM6@7gr5 zr0+WQQ#L)W9+Za zN(UoLv307E=_c_W9bMqDwa)Xnr|sCBCC%I3IKV6g)+I3yV^E&xouaS5MMoEM^oZGC z>0gzY0z!ML*K#qeOOHm%q%mmGFzf_^wqy{UC8-L4exw3QfkC2ig^)!FwKi`-U)F$i5i|iQ=ok-zDC9&h(os_eSHhqG#2iQ zfCSq&}5Pea;e`G0=Jf)phcwh87is(=PtmDocJt;XIA3?kk3%nWG6S z+#Bl;<)+25r$B-?YR|kbWc*LKN(la8XEz-mqx5GOMJT_TTpyN1)KUGh%?a48sJFMC z{pM-sJ;eDY7=q#l=>k+B zq&iPqG(RN6;?*SBR7g(MbBYD_`uGyjHO-lhThVFX;!)6IdBr@0{9{xVjCvLqgW5d4 z`g+ql$NE?1k(B+k^Lf@)&KY&t;q9{!T}W_SPayfgWj>MTd5g^4W29U z{}~kZXX_IH^W)+6`6cv8QByF~Ld(=T%AUXHd$5p4aVPdPv4g2|%CVB)U~bYlE+Ji_Mxu2`M64ss zz(BO+SYfIEWC=+vIDaeYbsd=mkN*5D@H2m=&&x)up7Ab1L8jsJ9kdFnLBV#dTy{Dyl)3q_qOWIE~pJ@~_M;v25 zl4nqgmAK(sAbm37gJr3eok+HhgM*M!b$iS4pSYuwr)Uo#Ikupm#~v0fZ)=C0t1(XA zc0*@0Xj0tHgl~4OzCcO_=Felm+xmSiV_&QGnciURgME?@Fsvq7U-P}sesvP3*pqel zsgGA1d!R*^^q{Jk-qZG7p!x16C53tg$t#}3gmU?tTj%ON$gQ$Ujy81*o+`GdMIFpU zP(Kgq*M0uo=S3MFiVo>aqmL~GVcgO5$P3_QsBi=CMU?j}O%wv3FaGQTpUJ`(JCGx% zt3Jl39S#bctF$~#muaS@44D;KnN#whce-?1Pd>>{>cTXc-?I&rot!1<7P6N#^iS9` z%Bu(z=JdfI=!6~Luh!-JIyT(=ROLSncUaz*d9;^kOtw6FmmIG!rw8ch3R-4Z@tK$C zMCQ>q-yCcB?-327O=w{Imw9VoUsXY$kmE;w|C*r>;V5_2Y|?{JP9|noiDT?(B)%Ux zW2EVIj=#R|yJF$x??K|r;yM+F<&3NPrfN#T!T`+T$hpkZ@&gVerL;?l(`r_6R($rt zusLF=`*ByBE|zxyfVAlrU`j-<<(}ES#{&i*tE?*nrCQv_r@b`hCFjo>=XJ5AHo9?} zA;F2=<;#@F@CWnPKNdqWDm3PiPD$v_CUnL?Df>1yVO{LmF7rsz(0N4OJQSR9rLx?fC4G&{|DN*0sCUyVywe z?zH88KAaym!9h?0>rEcvzGxk66WW2*|e#1%*RaTVd+BlhK2; zfXnSNaX-IJrI5T8#+>VuJ>;L+u#$8CP&q#d)NfeaGkSRas( zEc}XK5-o8UI`bAbHmtX|ZCPlg(yV%^izg!5cj%EMbvJyOFWGmLf;&0PPW%EOgLAvz z$qcD+kV$k)dDd%SzFAqxP!}q#QX-E>0&U)KPl%Zy0 z<^`0R?bk(>IkR&)v^M_5ah`SJZ$Sfh=LtF9PYZD%{Vjckjr#9|mjZNZ+23izTjaeh zW0M053fv-CLv1)Pc^x^hUHEAht=iRX5r5lO8XO&CcMSr%*X*|$oTD_f@5Q7^nbeXS z{%YcAh)ku6>{+qP7?gjhu1l#k`F7Z6po*c0K=~EUKHY1T5HPLX1u`;1+yqzJD^upq zHsY94ADO3ohs0xtE5^_UpB3P^p@W{i8bo{Qn|%nyACwlQQ19)>uBUl?Aw5oj8JQ0#x&d8h(n8A@#>11Gwa;Dz&ei^b@uMVn?0sJ!-I( z8X6D-*`^ercLzp!usUA65X^HSdM;j3VXlaWDwJ1O!0Wly7u8~r3o@?DcPr%SZh~=H z^UFMu(Wby+Q-Wlpf)xUu~By4UGH2 z73Ki%-FJE=ABYjM@bjEU%yTs-x^L!_M)cR)0)USF&UNL%D_&i&cPmjwLp7BotjYEvWb0zf1`^o}*|!h^oB zv5cYgPBinO4W2W&w+`m z4JU(sqB%L!m)ahYoL$mKV;zF9I~_m5O~dUco@IM2=+M+M^9fUlnbHXXWDjc(ZsU_* z%3hehHLVxOjjEVJ&jp5fPk)7|RGyP;}`d*gmsfTS&z-PiNHi=IclSrg0 z@t(!*SOKFsz;onvb8t1$Ix`OSZ6=kOS!K zWuQ8pt8{aAjOB)&Re(iJdYW&<=>{U&W^obK1g#z5l4(h`?h)NL(9gqpU>80(iysZ(ydXZci@MJCFYie>C9s>ic}&e! zbCcaI;{RNdup2y~)-UQHSu(?Zb3fmMx=tH_SS8Ty;fLVHA!s!8b6=B8BtCnHr3#9_uszlQyQT8{`$M+owNJDY!< zTf?0H>Bzlx1D1+X5uEeC>cb7}Jse)gyj{}GFY%k*s;@^w!GB!Kv}BFUMlIAsopr;9 zQGyOH`xh9eymXhjH7IjiM2y^g+v)E4=Iu9utC#HbBvXZ5v<&OQ>{y%` zpJjo;XH3}zj?r%k@^H|q34$T*!umuw`VS3farTI2$w}`^B??B(P}^IiBXr%i`_GF*V$v1 zYMz1+1xi(Nn}>@Ai9RDas3I!`k&Qk224w}UTHnjDo_c;GiYIz2I__G-lKKNJW%%Q2 zfnx>zYv)8_P&auw-nkoc3VDfKf#FMH|D;y@$4&@^#RzIm)fK#7|9~Bj!)U)jlVH2z zySs`5+doczSM&Ughit*$HW-^O!0bX<=BAYu%_2}j*RXUfm)an#g3og>IE8r8U5GBi7JK!VQxOj z-IfPItCVt2Z_DCQf?~x>R=P|>a^Pb)0@bhVj}b@|>5af&7B*W{UtYuEGoT^4{!A(V zTCxt$>ze(f-{|YFPtLdP5_(dHRVIe97@4c_;OB%#C!@NbUZpi~>pRM-{&^4WbZHyE zoR-aKQkb(NuCgN%yzi_%zmhp8ob`5(mg>{#*+YIS2;rC73f>fBymG31XI&Zxey?@+ zJyjOy>o_uEl+yRUJ83I~+GAhuz}PS?DG|N#fP!u3lRKTN`rk3G+L0Pv+{O|f7giD( z&%P}x=a>V(<$hk-w%Py&Mj4-Yb6@lY@!xk<$Z7(#gIk&c!MPN`jK9i^fXzZ4b&!5u z0_+crzw_^uQdwezwaddZuZ2(XBl=oJjTXXV0t)(h&i-4!R=t>r=ko@Gd34}Yz+KL7 z+MG^D(qhrusYO{dVndp0&YM+Y1;>9cTaqaMOdsXS8i=V#{AqM>1XO92N@|a3vF0_Z z@!^5pMVl|(hS}1Vl=mW*CPJ2s#)xeAFT3w@SNtk{<_9W-IFHxX=)ta!y@3xm>W)3r z%>iDsCz~j@b?R;o7b21q-YuRHunANVFQ|Mm2L6dOZtSS6`^ zz4o>(8Ks@Qh9#swmi6n=)EZ)WT{obrm|h!PpG8Qp`0E}cMyr=$wKF|3%rnd{Pnm<- z+)}sIH}nEh+T$My$VHCBes9y<@&%&yM}ab}(&vwB;IoOCtd++`W-S#kzCC_MV3?H~Zdg zpSG={C zfW6zQ_yHQyg@0b$Q(*>Rq5%5Uhp=ren%>FaAh?Se4^YaQHr7bQ@^VVn<7j6K-plB#nhWz;e?*;h5#Gl^^EtHA z=dIx9220Gm(Q%WB{Dhlnu0e>sAPHi+Gd)=RWBeW``XO;?Hzo_Q{i_AmoO5>ZX~Upv zsQ%@Z^aj=W75kfPuhL}wBs55H69Q=4GEUr(Y7-?pby(>u|Btca3^k3lcr*;h-|g7l`?&jra{w^Fo^)_c4s{J*2GVY`*nGm6Gp!ziUTw^uu4)& zszz8?i*Ct0AAg^@MRX)EaPW1@8U@z8?u`xwKmCo zJ%;yI51SVjdq*nY>k(1^Dv8QGAw|r*gghZ!>BD%M>5lRAr}NP&+90E}oK1WSR75rf z>}cZ(p1J`VtSOZH2*cQgpt+m+#@Di&>T!41|DMDS2XZxVq4%k5yu|AuDg@Hg3iZ{t z-*%W0^N#tSXKeV+<+m$266UK{|FTMtySKAmIU*@;rRJ;f@6N!?=Wa7un&4LLBxXNb zJV(&O*H?q=B!g~qmI%R95#{7h9_KEx)od=Ts;v*gy42JTVp6Vp(n4g$6L7O+f0BXJ@O{qmqweN__cp70n57LyvKC z5HggUO>d{=|L*0t_#@-#mrM8SKLak01=0>v(!-k+dRn^XdPHC}!TiDQ<8RQX7~wg_OReYK7UW{_{7i=qv;9mz5|ieK^=ModkzvMAwFj!z3WWA)qd{o<{ck;* z^`WLZUF^i7VqdwSYuJaHU0G*!9sga~vZ)Z` zq5BAsX_J*<<(-v3VK$k-T2DvKd1p+{9_PkQ4f49Ddz0!c99hDM^ve!RvC#XgPW|HP zUj_#g(+X=>cC&v!#)<~bA5{5gRpUyvXm2Ti8YT z-jtfUU`p!Z#&q3kz!6W!?Hnec)otbs_dOkfU?iE#{Aqjr=Un$f0u=Y1??+K5x=j)q z5H&4eAWvM>w8!U=+y#F9(DeP#KnvSdCZ zdqa{a6!J4zE?&j;J0c*6L8>44eurURQY1c5XyjmrLwdevc`*{9pdR0i20MP%UVKLV#{2(SNHW)a8{xvvqk5OTtJ+QAZ>SCY4pm9yUXLa&Y0Gh_VYaVz9O*f}!_T|DVtMf~Ku zYJ+x$&^gz$vBO$>n`$hLj~tYxZlmMJ{_iiWKEa>eJ|8iE5_xm86*MbBqO+Uyi43OP zA-$lqHkc)zyVTw9^y_xjp^xTAKnv!uENy-)_8Mc92in&t`@kDYw^v6}5 zm7*UUtG>0gUQhaZtOOOsUNn9?klvBdkrt*47aj)?8x{+)Vw)r0(19bKmPQFpg`#tt z5`d}o{?Ib{JKs17wT4In|L3zu6pXVgD-oR$p#WO&*C)>^CY&79ZoZx6)xgeN<^Vf} z9xHd)`8!kHq%HM}IIyNumrYaN|FIcd@J-X>(vQ}l=a4t!6MEKoDeYVmnnuXR6TYBr zc|##XE~^?7ufe9uKBxKaxMlD;*OcE3YX0I0OG0-+8Szb<`sq(E*8i@b+eX2y#%PIo zv;hc*i({qLX#aRI7DA>KsuK?&8V4oXr|A-fJ(ytNSZp}+8WkrjbC?&kydv`E{brtX z!g&(;iS#W%qXPwdAVrSf*P{+aGfVY|j~yTXFl2EMU&rKEh#*kgu44j&VuHJychVh7 z{RWAN=-|bWlI!-;BiNDaY8LuNvo3Ze60zU&-)0-7MQAATA#PAhHJT4nn`ID2Ne`;d z$!LZ#w)1}$TjIuyN(VIjx1HX1nB5Vf-t+H-dTX+m&ZoxcLhDFxUwyHBDF6ncVuc*G zr|SI}v8YFJ>8xC@TbN#)VfFDGue*x8;qoC~d?lmzf}i!X4Kv~CzvhMW_;aytxA&sA zdta<%fl^_Y1dCHW_MFdUfR1iVVYtET zJtg0lQsM^yYVI9wm&Hx(PJj!{@cCSqY2tIN(&H1)q93r^?mn)*ng08bA?1+@If{wk%<307a3!ft8X zl|)nt-TEhA>C*R`7zWpxZOGh^VBDwSCs4?P7;z{Wb5t@pUYPvMWr(=#39t<|G*0j) zQ6O%^z#s>HU6Z@pcDn@Q^O%uH0Bl~Z2 zb8*%@h8LhJ=JMocaqS@s>@8lnOU>=16N(VWcQq|S_QXWEVO+0LXJjgAD zzQXq0HSO#Bzj6GzE%TS*ge&;2@JUthznf*y)(eO+sH!Zm^zQyyAX^G+-`E2E50NPz zmrTQH(H47Bq>ROq(b947$7%|FW#ATV^`O z?g)2YAlXT8p-)85SetFk&k3!?SUhh2=cRkSNw zYq^o~k~eML;Z|R}^QJ>OQ&$YM_sklLYoqy?5sV0#BVcjmwz z=^wND`j>M&&#gs9`Dvv4;#A}5AkT|d#2S_WHtv~jJSD>W$$rx@g`DjEa6jAHABI0M z{7{U_rKJ-Ce|{c|gsk+rw^tQe4Lm|LVfG1V=bpoqW7Pi9{CK=wBhhF+D<{#z@`040dA<*(r*&E zKvR2%xa`FLZ~A9vP1kJhQ|VP&fiyk;d8DBqxbyQIc9>Fe(^UE?h(5~w9kl$SMqAIe z$epD~WGCqo*O{;9x9*f?ZmY;5< zjO!quuJBt`1L*j8c9OUU~{d6%IoW9V4B0cLriw;#5!)&Se&C30WpkxGvTAMGERb)#z za&KDfyyolNdo{j=$uBOUIT+KrmoAF`F(S&iJ3H@iXYAH5Uth%|w z$1HBlr;M-LSJR2<%ax9YxAmFPy8}asQTvMyuzYyoj<+VndB`V8t-#HEkeGlbck zgp3OuQN^R)Z?Rc~jEmo(cXH;}Tu#e56plr_-V;)C>DzS`Kfl+_)6BEfwFlWv94z>8 zo|z^&@deoc8t|802u^Z!7k)0?S%@?Qlq3WF_+&pPO30ADcxacgPcP+@n$|st{-}cJ z3)8@o(u}Ow;AM}hI3i7WkT0k@ld7#DvLEUrY6^Hj*Oa|q(qhcZ9!o!T!6`|7T4h6$ z6#vL+{7vwzWQnqaXBOLIM^?xwTODJxJ-r)+|I^H^SwJO2Ztk!=OrRo20vLbmJInBv zt_5rSa*@FaH~bSpgWCNsE3vF77d9?7ECtH9}!}jSM|_grFa)3(PuzCwj?!Tf1&i>2I7WU0p!5%|WeS0B}=DTkxxv zQNb2_t`;#aZv7x*LH7)6^0Zy05I5F$rE&!)i5Yh3iyy;>=8OhbIItcX$_R_YuLo0z zN=){bJzw`)&yoG6W*?%mVX$ZoT_v#GvG8hRdQZxg8=6>+>x@$`OBy^1=I1ILF&#ST z|9UKaE~e`*J@_g|TO#|t5QRusZ;mIk-~=sdRA09nXg&UMQnsk9M$mLbLW3w~J0Xdse%ME=`=ms0|!W3m6(^J@Bs^f|qmwRwBKG%O`6Mq2l|5;M>?B>suGZ!i{$u*a61A z(FO@I6-w9@;98opme5@Gu?`)TrHjj1u=96lJ0$NwliymAFOQdns)J@-O{h}-y7@EX zVVpjoHTbg}{+BfmpkK%~TDSOO36J#vI1(I}iq~a`H_&xO(BCeBW=|F*6m&FqyTRXt z)r{w{3~ZPa_8fYs1FWD7N*@m0&?LjI?4eezd|dd01rk^er7lVd(yBgC1(H>rG^nKu zv@%QazS2y^#qFc4XvApz;$KOZqkmwYzcq*o>arl3$r&oAXv=VxSQNT&@P(uf7OXBV zTV#db@9B4{XMoY^!($_dHKO_zo61%h3+Kd{Qr>$X&BXUl&_e5InKtGQce$7ME34|B z!Q18AW)c;ruf5v>6w<#-<9Jl-7|7!6q_oL$JbUro-Oz@Y9rDwc%mVU{rF-J6S%=Nc z$>Wam1i0*h6cVKBtI1D^Ny+*8A6>VtH;kJ@!>fOBLhHRb3C9y0xtb z64q@7(F+aI9*$k92QbI5U^wj%1iU_PVEv5zJmtJ1R{K<7`o-(BqsO~e@~zgn#;?Aq zDtfCdZ*@#OgxI05?w(fO7e}1_qFwzLt~1x!*0s`N~X$XMx~!DDPx`YA1JAWa-c0i`@#2 zI#2}h%A+JG(Nb$H(Hw`N(l7r^PZwQ8X78%Snu3 z;WlxoyhrN3u@ZU`0|bu(J(_2b9sSBw#WS&)a9?-0zS}Qt*d6LSYg-^thRer0a4wLTCdwD(;4QDK6Hr=0knIp0fxb zeD!n()L}d#(NusU!Yv6L36%`tYSMVoKTGSyN^hQ+b|k+hw%W_%y|jF%UK`26bm%Pf z^2xTZ-tWie_Y*|fq-6G(IKBdI~oM@lv3(V?j4}pQY|2Ki32jB z_gpR{Q1iMy&n2dr(jLoS=IRUu&9{_Zh5aYigUk;nRB|-{!F;EWgt1>TNItaU+I!|` z<3Ll|s#vxM`F@ey)f9Z-tL$vuR+bh^LA1gJN?V7)Ty|-nI}al+MU9eoIhhBDEp>Zp zj%!+>np!xolpwK%1i_o{nJAc{%|nkYFLc`aJ`duO zRmkmXk%RxJlxHsRWq&ofX;~E@AyJ>VW9=~mU^Gi`()dd{ zOLFB7EHZM4Qqn-JyE9M=BljhB#kxV8nB{f77wWdW((c-E>2#s8$*SQdPH4&W=gI$JZ(dMtz-FuEzZ~u*7qK{H$SrZj)KxXleyg%YX0mDc+&hF)|^yccKQh~KeCr- zwiK&Bux63SpvP1yaL+62v=e??QdG9$YPpA|6sD>5s+C{*o+DwE`he#4l}guR^2c@J z>7el>bPn|0D74A0c~6-GU1!ceuP?=IH+8GkGBB`_KrO;@AcIr);qLubZy2PL^Ri^| z*x_$!yX2&!*so>JsT-7;p=+6O0ql*)GaBM)7!8SybfSyJYl{83^e3Ehh5V1db^juj zgE4Uxw4?Sk&;kJ7?EpP$^+b1{71QLSaqzpSH&&U@({;GE_G6Y(mS3w@WvDup7%pT( zZWY-8n5QQb$2Kkw!&%?CaQwjw7B!Mf z71mbHdN*wD`bYb`>d7GMC^vCW_~31X_Rqd zRkrKKU$qgviE2VAGFM@o6FmW(?EhKllo zqgyZJhodSBS^*C}yziaBFT3#+in)_j*^?&*ZYljlQK_jMH- zeNpasrw=;A!`eyq7Mx~u#83vdOqVI5kmY7uZzoayj2NQ}{fu=xE($3^D03qE&4_$M zqyxD+>X5miQb1?b0>cmR!MF>j^2vVofpUREw#sFP1+(R2 z4X=Mv6JL7L0IT~HpxJZ-7vaX_Lkr5!^)p{W7S*v8 zJyL12SHDjx3zRwDk_5TpE`GO;`|I*?Ove!5=JocS3Z-fMZ(WBS(==lhE4 zyFZm0f_Ck%TI{|k5tI!FoF?~G7bMmk?GvL1mKL_H=j_$$+vTBau>AMOzXYdZp-ODN zi33U`ml9fugP127{@HYYk~54&A5Z6zDiMp1Rv)nDGV_A(1++ep^8afsdVD>~+z$lS zN4hq*3p(Lk^d0ro1g@VJUmWq+oup_y~d5?Y#1~)hiQexon;=ilqf6f^i(nmP3 zM_4SdWw}{5-b$eRx)7!#-C^2mP1nm!f9@hc;^^@KEpHr{g&4!_eRgoYfH#YV9Uf5|pl zd;jyPjBr@p>8+Ss5xKXOial$!%FLNyYYuBuQ`)iPM#-k8xuR`J(qi@@%&f*9ULFeI zX~>3jh|?J)-#Q74HCXyM%uI*Z108v~`Uf|&-~V35D6ElIElSUaZNatRrDWGseP$<- z7_&P#;P2sL)_uGXcD$4lkYeBkPc?x?CQng(^QjV=%k9ObM6m0l&6t{++VT0;@XghM zHsB~{abekc$ye6=#ep(#)SE3z&>2XdTI#>PF_PsTiIv^&g|{>SR8O-;lQsXxKF z8yMsBdUF+c7Tz0lKk(?VAjy{ORg2;s4dxr!nqha@{Z|bO2zqrALbS%z=G+%cRO$h9#3O2OlHq@FkdCoYl-(^ zufY-SCt~jP21>n|B|v&^tNXF#pdBdojg4Ps(9^$hD$+=_ium@0-*XVd4GpUl+NghW z?nD;~K;ON^D0KHU5{{eP6cN8weh6f}pb_BsCkE_2ymq!7zPXJ%x!X^sXIQB>^EUTg ze0MXQ%VBA&*8WNax5$yGriC_>^o4!0Pe z_-g#)68n-L6aCRQQ3AO&QYs3B*EiQIs!l53!~^3BnMVrb&RH0IaWO3`JG=b@H9=xL z>-9TU*iZ5UWB*8NahC^FewaYw(@7I5O3aM6-2c;m;1}3XJs7PU-zkcOTlQ0Hrro*k zYtqx#zuf=y^w+(T{0dX-h*s{<9;}I|9?+J+JRYOK()}8W^B*7VlCEfZMqi6Ntn?v# zIiHbwGVH{wM}BNe7`JzcDi*IHaYJ z@)rtt6r~JOv|nZGOBR*APIL{ElD<^BoL{$hbmv&z-gQjPte!>hogd0s-`@`63bcH& znNPL?#nUgpC@x&i`4}NSpUc1xeR}s@poP}p1^D9X8FYA#kG)y zB7~1KZABa^W>|@U=v@9e@f_&w3U>$3a=!^s;at{b&_(pEjdB1y!JB|UVn(GT$Yex`lT zF7UV3v1T)fccN46$DHaq*_e|CG{^+7J8vAg%+gJG^rK*B0prqNAV?QF6{b7K_ttwMl**ir}+a`{_`wP}c>$!{9Gd3({IqnB$n!bwgS|BzfJ0KQK$zS*VYGj7ms__W~8_%`6;IX$nSF08`87QmD+}C|bqJsVs&kp<*SRs4!&(fApJAm%}<|{@I zi6Bi|oas{qd!9$t2tK~ef=m-B8?WZSWr{%Crp~)!wRCrV7WYJT(MelJg;mW5h9AO% z{ouPB_M)KXAIRXI66>$S34wSu@oEoxwaW!%?RL@Lzhp%8K6L01QzeM|zRos$iW??B zU_Tix^w)Ks$?F(&liS8j_C)BWww+BVy77>gZuWrkT+Jw7G(`1m!P|&*VN*8e)tnzQ zc*s+C4&a)gj(?qsL9IzS7Q*s9c`9}UKj@9C&J}@N0(2G0S0duIOWScv`=%Y>J1_VW zRnW2-c!!I#uDY*YyU_N!t3z0mj%Jd<*bHoqI-`!YVKkCN{*k|DcVK7VoE{bywc0@} z)R#S!mT|h~*H7%-bg3ykax-M9Tsd0uobP8p^olo)iZ}h8zXgLT(iVS~iffOZG~nmD z{4#n)2BOFa=eK0s^?qUK!}{&{7!KULRLSZ#Vy`{6ubGkbO{%(Cmz%!{%C6{ zcb>Fas!E{;{FreeoO`Aj#~l+~*d7vE5CB#;a5(xb+A;Vt0!nw)b*S*(K_#H~qwmJZ zD;woQp{7WiG1{u^CSy2??OU~|c#A1EdebG=(EwFRjmX&cAbq!^>VoPraWyu6!n1+xxUcLVy`aR9i}u>;a3Kq{7rYyIFP{GdiqMRnJ!}Me&^7ZzWlBL@1=1wAuk+pv>9K1 zbGc#_$ZK9H1H6Cnh`Ic_eIztRF3gz7{Q8NpO{IY$=|WZxQQo)g=y9)`pZ&tQQdakY zHe)bDX?Dpp1@`7k_g+=AwOpI}YhtDX(9*B7Vb-y0I+}Dh68<;%LFp3_tBegDH8K=bUr_!IN3-H%}Ua_SQfvOqMXM_1%pvnYwkQyVysd5bcQqW^O^4)0S z6h0&ti#e5&!|~IJ@;euK0jQ7LrhN)|<(Z9N{q3GX{S!40Yha0w z-k1u|eW!p-|1vB$(E`H&^rYrS;db7k=;*{2G4~pN48JZ)qQU>=^3WvCC;z7Es~a_qjXQMR$~2SIG6MN>ASy13s*}!#0s1Ue6d~` zoNfvY#biHj`p`KLJ~OJK;P%^l(*;VpvyTZ7FA{GXby+Y0olcGnaM6+(u~{|+btNCC zZLTYpg9I*<5IpCsH=te4)C5{e&LmC$;qMqv7XO125xe==B!T zUP=*%n|$v)hpeWYOlAR^VJG)3FHC`C;A`{mn-bi|;0wChBhM@dh>cQMGXWP5#K3A* znfr~sbos!bW%Uy%?Hnxq$lK=iYPj*WM@@dR^}i>xDWaR36>ja;rsZGpnSa7LC$gH4 z#21;nDv{hrJX_wf`PdzRcQx|YN)C`MPH#KNSKQI8#COA@zj%lEJ)n|al}akt?P2CR z%Umtjx}JuWc%e^i%QU^Y@!kUK1?N8%sd0hAQ5LuQkdHKPXW4X$B&|j-uq(kX>+Lx+ zq)wsbcP_NkZdj>pUx`OVyx^TBl2W26Wieh;-T=&BH1-C~B}BgBAOL3bfU~WXg>h{8 z!+qr$K`G_qR8*?Uw)@w|0Vx3265}<+KtpNEzr78-C|K@VsToZJuI`g8C31YI1uvsk zLmuM!rl%Hu=A#FiuQ^{yC*w3cf;mG^lJuPyztk`qc6<@mQt;sy(`6KDsrx1*W0k~d zBMRuWVf6Z&A8BwRnN$(M%FixbwI`gOxu_EmbN0gZc6&G}TWQAdDYbXa+%JdAd+Wk< zv8)HRMl7=ifUtdXifgUwBqgVpwR4WS5Wey-V~Q`;ze)GLSLh{#u7y*Hx<0Dewsckg zy2z@*D_+}T!!s)K7A7n57^-6jI;9ho?p0!^d^RH>Dn0x0{P)2@*>Y&|{g-tB(UmZa z<_84r83&&7c;ou>?!+HwHty=@M{pegH?&C%EPm8-MxfY1Tbn?9D0brW?JNO1W)PBj zXOo1hbM7)mS#i`KiF#||3sj&oq0b1uT}2wFNeMp`^Z%YiBdnxT*O8nRf!r5EOCp6C zS2cw?Exn0*Y+ycn-pA1{L1RQqe44WVL)CW%HQ7boQj{i5LQxTefbb!Wb&MS_B!jVwHNPg z+Qsu!W?fQ=ESAz(`5KMe>ey}Q-0lW@JwD(?l1t*zo*CS|_I`@PzPG`2lw@Kvs6(FS zIQP1sxM3=xy|C%Z&ZoEE+HbRh#s0bM$G>I7?y(W?BdXVIy56}dR)VcpA>ye)Q`9on zQ>>`chFNTeeXM*ntLtUF-vN95($zjyeO-)XyTmdcF}o&JLC; zuHd<1_Itez+_Mu+DV*y`zkm7pX8j(N9QuaM&mjbJu8cnt1*t2I|0=IoFz;XNa`G{M z*6!$9Z|g&HzSa1#vH(#6b&#k6wqNyMc6K8d`W+RkJp$iNQM*>mJ?x18kf^wLNI4f$ zatY*ajIu{_w(ZCgJJhLmE_Tp`a^tSsF+s^@!B$4pt(k<2tFGt(KSf>vhv(M!#B%5DG4=+NO82OvG5sr9eYVj&C1L&J;plrYKj4jM`TTV*6Ih z&w@(Jg0$G1e|WSD{X0Id<${q(YPQsqftO{8UoCQu2#KQuSBKQUU>*yl7P4>KAc_O}c# z*-l|lbEmM-`NqaN_V!YZ=lH(ew}uiCIUzC_zrn-(EF|auEq#-FFIxvg%B#{Txj&Zb z8!19B215cSsApLKe~SvEEcVDxx5HV!!fPIGz-#yAIk{JAsn0Y#w0`h~D%-Stc@T){ z)3UGr1n6^QckwmVFsSw6t8EnmF0`A_a0I1M^*n;;LSMa0`c!-^^}sIwO|0#gRNCwO z%u~pk;4C2EPmo|*kwi@z5FlRV5BgZdQ0NIA8s(x=$%bZfOKXrHy;k8Qf3Ygm3HI}G z78}$HwhsN;<=00L%1(evG^oMSMLrS>(HMfpItGNzDf8 zT@PoBPTnDCCGw1iGg-ZTLgSDwztd$w zx2?qj!`ewcPLfpGV=28j-X}|*B6LlI zV(ygOKpal?yjM%BF6@+4ua)ZNMMKT97Qpl6AMs9_G$qjKUHQkmvH=CKf2J2xvtlRx zZ3bE-OVc4JZz!eTcDZ$Jqaw~*_Mm-Zorp1RWO1#0zT=w~$y~K|O}|8jVpZn`U;=bv zWlfxI%Pfko5EHR!#S|)hus0n(QyvL=(vwmpP@8viG<2}X;@*x)IOHitm-J;hw?A#X z`ON>57FtBrW)e95YuRH<0DtshBbA)B>sH}Vjfj|^A0J|ybdF$>fC{+2} z2)1N7S?yqpFa0Tzw^Zrk*7YMY3J?EeF4wPM1|a0lf#`!pNE%*`%7WfGU+%T*c!hje zTT?OLFm|AL#7QiXU2;o0VFkFv;H&n&e9LZ`LUxRkdQ)`wA-y zvp7_zP1pVTFXvWo*+i}TrqcyK;6Im#;jN>iH(`I=E7l=S-`WCKwx6ba>jFx%_K9pK z5}fe&PSi@u$!`DwUGjqy1G~^8aL%Xw=kCMjP^PR1VB8xbjKxJzm4m22^D{3%$;P6R z^pPh9_!#PJm$>lbwHj`psa4rbc)|_kA=C6tVdTOrMoJvpWQPkhG908ak>%X^qr0-2 zn!W8Tnmt>BzH9Vv#^&vB$zR`t?omhKByn4aCUZk2VW*Ps(^OU8OUCl!wmgYTQUxZf zsf{*G7_y?5zLsDt(f#i<+ivzstw;`t{15AA56T-?PBjQW`S@&6d|@K&Otj~s^!dw(5r8n9$luSCQ#z^~?&?zS;)9+EU2bl5)aE1>kCr-uUgKXY ziiKx5<0Lw5T&!2T5q+3{pf)iABHRO&w~4(=h3+zU*4BxIkP~qd1zl853YS6eOI;N6 z#uSr?Z4QQzr~GD2Bm^`l>P|9#Fmd2}JVk>IUi!-u2sfYW{49486%z2*{G?(|Rd{^z zN;+=zwB_C zQ)B+Pe~ARI;kn1|%<$U;2m2_5(~A&GGJzDnNS8M;o%|>U)n#;kh#xFIxK@mnlW>WD zK|?c4jTTWR8p?}xJ+`5r3Ae6GeD1fxMf`JlXyYhx_8gc<2r9KFK3N!mPH$Td;#(a2 z;;!sY@PrlY!YJ_YNcQqHQ?eXC+&bX!O1Io2|MEG@jeTd{LiNHzHPtp=h2x1JN$gj6 zDExTW%=++MmtDvn%U$ZtirnJSCrwFzi)MqK2Wh&N)81kcG;`>e+uUco-#%i9fK-qjAb_Uqh>`oSd<7!}Y#1pezYKs$+qiD?Vx z8Liw&-!$r)bH`#N1~v#FPVPzcZZI(d-r%s#2Uw#A$aDt5JP=RD0u$fzTNX~@w+avS z+#9B?uY%rma1rZq)UOzu`Id>bx*pDJ4(;c7JD(OR+*7@!0pBRjM`)2`w7Vp3{VA}# z5vtc;NbrNZ;A|uxRuLKa8OGk{xXa9T7qOhMxXoT@v z#(yG^P7Ttx0|x1|NVAC73jUp3#ATiNO{e(W9NAxB5LAk-sMvjn295&_(t!4%Sy6GW z;t7v)MA$dqY%{n11@oskHsh>=`;Y}f_uta209NHd&xoE6;)k=cd!=v^|DkAZb`Z@@ zMwp+I>dzj3AHEETqmxEi-(mwmh|x{Q6S+wsJOv6d0+(imn=_PLGk=VRUoDttsa=0R zQLbIC$y@Y2SZOyo+?mnznRI00vM;NSdi9$t@P0~{*LH_@ZZxj4L5x+KL=F$KFU_fB zjoI_2*yG!f-871I{SaWFavMGlK4$112^FAZkAFQi$NK@)%_{Ac|3@NEuT8MHsF?`L?5MBm{=N*}t5w44ziNp~e@nSZr=QjEpS!|8M8@$Yr~ZpL5zI^bONR zCD8F3JEc577#`Pac8S00GTf^SQ@Z9$SAG{9drDzr<~QFFVv6^RqZK z^u2~66P$PtsRodhTWD;*jjLyVzJDnBtpB{M!eJUnbNKPI13M@2-mYKv=TPAkic%=O zywj7`H;OEP9#=vDl=@vt2oR729ZW*Y9a2YXe$#&ymP(lo{mjcr+=eg=%1G?CBXGQ^ z6$=^u!snBWL|BBNV%j*8TVe?e{LP^Uqe|(xbD2 zo2CL2F(xv&IJ#rMD08~JysjastYHZD?1_8H@`2=YCA_D@cD~ecW*Yg;kF}5`N*C$N zP%&uN!4xF=4u18_<*zjzqPTsVOJej1kNRW4IgF|R$SqIfDynECmM5vl_Sd-BWg$0x z1-29DpAl@komTt4v%eF_o(!is&qFwW+Ra>e$qqoylsBhRekcxVU7M{y#VhY+e-Inp zN&$&x+c%ayZ~xtfME~ANyU8eXp$}$#&guZT#B&81dh_WWX(*kA=8$5tn3{ zoX+0EBZUnjo7mMKiI1N533&d!`Yif*-tViM^T$Ku?ttJG7%b+d;Z$2qA(Jgk^BcjY zjCn&u^N>97cle+Ej`t6$1cSf{eY)G@iDkdC&N5XybZdN1Q?hadh){#8;R>OS$0})W zESRQf-NGyo7gXaWzZJ8Z&AvlZpy*o7e@++y!1es@Tt6|@!hO7(+EHj3G`|wGF3=i? z%<>LIKk{y#B zN9bo}`X6TRMyK>7I6cC4N6>&o36>1(KY2u$7%N}%0c?iGQ=*zqYU3VYDm-b3N|(Y) zk}fto4|sFiOnRBWLO117qOOGc%?j{`_g|@>*nmj@0P_J^PG0XVK3O9iN>kuD52D)&t8Ji@PaWI8w>0TNMm`8pAh|xNDxQ+1v7Qr=|Ki2bc)rxVu8c`p zGXt*lS26!P`PfnRUbso1WCbcX(kAnPSTbf`0Pd;`Y#^sIqF7{zfAr_A;j}KzbOz4G7ze|DJzZF2yWPhZmdudTf^76gos z=xjijNo>=%h(VPR_kJ~ZC0giQ#Ljk<6T(^lG1?b#dAkf&dZx0IiaIGTXaIwY&@o?S z2Wf`nbE0%#aCTX*G5hhStr+;#4aKZL8@>%EW7DM!SKLnJ?btfBhkme7Q<_eRB`7WI zmsoGFOAmc&4{_fWjTgizJVW!AFeJ*15kI47EWt*|%zuq^VG%X?R<2{7_H&=G3v@IT za<)C}BRCt2u%`gO&MpHam%iG}T$y>({J5wIaxgZ*bP#I-w{dSf#V5Q)jBy=5vN0X_ zAsOs2g;F|H@w7eEI$Ry$JcA+XJ5>l0Klm$XsM|%2I|th(tq?8lEMILwTy<4DM3m5L zfSDqeqRi!Loihd(3AdQStLJ6! zR*7Z(N#2Kx{YIMJhK>|3MEdd8>rU4%l$gX1Xiuv0bhu$U)mM#Aw}Uq&n85MC-VGX? zMy;>~EvnHd7Q%~yp_G`DUoiIUzKxLKOz(XMcT?LH1|Fbjy4TIiJ|kzLi)wi(R7V`? z)uG*~ls1OPZ92)S{EGL;;ZQz3%ju8YElcYZ+Iyep?OvX7V9`k)1wWGKmh^Snfp_xV z{;nve?Er`ey!^_zCThAo)&dJD}ZfS}5Bi6?O%MIW{DPdiuZDZM#7 zsa}TTqAprkTr>*KhkaUI_v;rcm<|Wv=x}ov4bE6KPwu5u6keU^(afLG?`^FQi(8Ec&5Q?49O;&;LU=V<8Uu*wQ%iFK@Mzv<7u7d;iIgC|#3NH0~Y* zK*&oz!hH3=v!yfnVdCnrMOXZ5Ae^cpfcy0(u9 z*>FfZAKjacxw_9;30mV^#oXd4tkmy6m|y#Het$ID;t|Xplp~}aAXqYbDKEHD772i5 zubi0wgs-L3a;DaKr93s=1(x0tB9t-8`7wUNs90RKhQFwO+ zUzB4B*#SgDkiGK0`^r;`yy>!+TYPwa^5zD)kaBbz?feuU9t-J_1Pwnb(X5Zs-_~_4 z6Md}Hi*Pned~`*cu`s_gM*?8{S+x0`RAQILRYo6N;4>?}`EXuc^(=P2b&QnqPV3tE zPqmUHDSUvt10ck* z=*a*ueNXZ%%jXYmwQTmvPEo&p>u`(l@Z9|nB3NmF)1Z9qVyt!I{7(odHk{hdCmBe8 zYdhT^1;WR+x&sw%vOqyM723?Nz0$)n{<0T6ZvN3Udkw_%<^K^DB>ziTjD-ZaUWmA? zs-Xm0lfhxy84O!FrMXS6qAF zPpM_;`wx_aV|cf zY*cZT@wCbK`X0Lq#OB7+NNWZ+$W7##K2m$s~9~LQVs9#azD`M8iNQh=ySngAmU;a9N2l+9W zADmruTw9!9t=IS^gVt=ma0wDvkghO0y*C-42|gxv{EN7bMN}cs?TEAOaj}v~rp^2Q z77eoT0eaym0;;!QGKc83NU(?7zyNm%=qD$qC`&d|Ie?o4%KZx&M_I zaE=J4q6dZZg&VZ!=Qb{I$4yt32(31;bnrgCQ|1f1em%idFzjG8Dh<8;rRC5M*m$A!XHPJe z^Km`wxj-LYZIbK}6HmKINiqE&<_eEmlm^0KQyOl|mzI_6ilo-Ap+>{p=qc(i#k0-s zn+&KErRZ4*_oOVj$-dmBugAC6{=vXx(d&>3d}!Q0*21RQ^nT`KSfIk|p^eh_FkeB% zlNC{9d0#L78h0YHiko#A8Q3;bh^L&qJ7?c zJcIEzWKpKN9pN-=Sto&<1J1i6bB3HukC_t@x)g7l|hlWwU1(Fy$kajJ>P7NS0M-I z2i5h>v~jHhoNJA%1Cqg?#mQ9EZuv$bZ{8+7vo_;WFdA(dl*+s`V5*!o0xP)9wp#F5 zCw0EVQ9)^C=D>>(u|03Zo11jJp)BMIMD*@0dVn)`;s7wHrrTq=%jT+@OWpJX{K2b- zXUbny(X+p<^4K+_pop$i>l>^lKP>w3t^lb!vyYjJpnqU}XIP7l8q)9R^J&Tf-`D6I}XD{p!XpC3Z)n>jOBRAwb z4>~cw?ZB^l=;BbN(SM}P{ifoZ%2LSPO<%!9ce>;Y6GR2}nX@H@J@y`v5ys#mI4%QE zRvrhbOXMWr8Zsyc1OuHW9@Rx>J~ZjoI_<*-_s0Q&tuSXcRBAXM?iROAbLft_fOBGt z=DDCjc3iqyJIsUI#_I&2uwq4@f78#d+`<|ZP6yTp#_Jf)JqDi5`IBA%5CMBc!K-FX zkol)(-yoK`TK2rb@KQ}5Msn8vE`Ye^c|z?JJ4A@ACs5hwmc9KOHtAE3<(Bjko7-Bn z?;Yo?2Hi%;r*80$gg=ca+lihPt^dN;fqoge1pcN*-*=8-Fl~;&i%Xh=Zpf3lM)(y- zmRaXudRD;^jQ_DhuG!U-OOFyNA6;G#MjZlK7G90dSA!CZeo9;d;6F3=ddNNHBFOSJtKoPqg2X~SM~tQ zD1S9wL%{%kOq?{bL2c8&g^eC0rbP^ih6fI)m)dcJe3=l^e)&)%sA7jh=zvTw+A-i8 z9a!Nf%cJ>^GU9QvX;Et322_#HIZ|~;glt@=%ctC;MHOA9*I!cq*qy&X%so51R-#^M zk+B@HPFQ6_D5T}w&qz#2cvS;2xXDbqi7Im88Wg-S84y+tqK{o0Ia5g_7v)H#8F1T= zV*eqb&oG2)r7*JfZg$J{#OiT7^1d1|qQ{!_hNju+`*?rKan+QYt@kV=_P@y{La;{*0U@L8D?;zv8yXfdv5HE~D*XL2%b0hFY zHHJz@fSIbSbQ?WCVntWkU>_lKx|rqsNqVz_;G||~j7yE&T>N1@eY@iFg^1A&s5iBe zzoL+{R!=Mcvb*eMxdMZ3r}d+dSq5lZe$=xx43|ne<%$4K=XT8Bl8!UkEMYe@nmk0b z8NNowIH|tid^37q$!)e{W(yzliP2_=Si(%I9KHHbo2cZSAM{<@HIqE`M&%Zg5^@Eo zD`)ZXdqR6y^!*c__zSH8u?(#mPf!a<41tb#TinV59MgQ7td3nFl?}s%;k(_x&ZnSg zu|4AX`fU0*fk&R?_bZhQ zJ+p5`FM5b=xU^82_Li(IL#fwfxa-a4VG;aUHpQwh-2A~f5UUqFI0|o z{wcaR*kZ=Rp9|$^5+X#9)YdbVt|l#1%3U>9-g3vCEM6~_qllsuLz1V&jY*>lMJWkO z#j-95+q}V`N}4qm-aO%37kb$S#N8)#%U&X5*Nz{5ck{|1Z6fa}Kin~GD3&@R`))Yer1&P8y*-jPIO%?3`Iu^myIf!HLVda`q%I^k~T@rU7>L9CW5K zwV;x7o!G87v)-jop;LqY8lv{dHdauN`$pxvSWC7xhl!oIGUr^E*_XP#~fJm8N}a z0Jn>sUM3rZwX{xuc9t{`K98=<{lzOkK%Vu?zDi3l&MLFOf5>IyOb%Wg#CT;o5XeSi z`s2Xt(MQyMr5KHn2dS*OzZu^0@+3zk$l5=XjcGQDu$|scU3Y!N9ChxR%d66EnamqX zgigq}St*S4Tu`Y9GM2ZgU=ytVone+^CN>t2jCOZh)NE96bZ@(iYY*BMkdSlgF1bMyUW z;8OZsCU-`wrtSfKNombIc}K{PPPmlGH$QFEyXcQ4pS?cmS*?=^?!6i`esD#eh|UCP z-5K!h<4_XKL}YB!!=vd>m(!wUwe2z+Nqx61on?{Re6x;3XM-T6*W_r~2R0`}xHrNf}In#}63I-U8cn28_H ze+b@Gu=q6bB-ukmdu#2z(n_j$M{4s~+!&twBUAiUG*b=}! z$?+39c;X{fxB9{EcC{lb0EcO*5*gP4Fz#eGI|iL^tPTrWZ||iLZyiFT~VN6`qjMe$~`Y{gkrdf*9hZr|09@VsUV#| zs3DkdKb<2_WQz{CZnx5Zy=rd&P*i7sGFJ~0Yse{o8oD%i|0LYJy588|mW|+z5s$6B(L@(mApd z_e=DSCo$l-v1VrFZB50YcbKxaUg{$pP#sY* zU(#sbITG}f6-$+=rb#_NHxKFz^s`oeef}kPKpLn(KWg$!h*=egIz_~TlLK42vspKz zqG-lkd?)`64HMcI7nSvl?X_!yHNp-%0D`~P=&T*>1PanQ5?;`2G*tx>jfM~ZpoC#ftDJ%YI!2DK#*|gk) zO~%;#y;51I2zYHX!;X#yam@4~Nw45ZBx=#aMx_^vLrB%WToun_Y1Hz&>b+qpM-OGSOIZ5e6ltX}< z>PW9QM$)~=E`eTMnKlx`ilpX+2LK`ko*%{pFE+6<(}4AR$sXEp9v3Jr+3O>!O{z6A z4rs%KCYLj!|2E?CWH&` znCJ{14_Iyxy2EQdH_YNim(4Myq4Ou*Z{@Hqqv|X}c69D(dlbiC?$~_m(}s;-7Mpl@ zqy6Tu+FJ(4w8=XmLMJ~4Jt5-c*@a`IFw@sH9JYl&&L&?_^=eBqw0$x#47Z05!%Nj! zB||*f^8N_rQBrp{Vr&HZyY;0hcf6>`q~O@WL@u|VCP;t;Cz;!F%ceR(&(BQWY`=)e zd!ZRpeq3Lqi9J?&DNs%55Gi)o&1-g=o|g-3*{`%6IE%Ihd+Rm-CqgEc}Ot; z+~D9~7jT@LxPd?3cTzXQh!s}EcRGxg4vh6=g$=WwTIqm$n(_S&-{dZGmT)i5Z*$&J zG+y*b#+qImX8@wBhxLNM6|cuhdH^0gw=si+W8H>No-L`NstgDcb=P~m2M57gceE_0 zq4byBNBuVnx%rPZg&m$s5lKe(TAWmig~(-ZUB&oslD^q(PQSN#lbJOPM5sW?e#F3H zo7Xn+<@R2b0JloQh?ws^QPfaYaP(va-fVPmAk7t|4gAuyD6Z|tU*3Jv{6?%4!lce2 zQS*~8M{a<_3XkjJ-TgaCT^zJ zw)$x)dYHcG3s&p;iZgyrF}$ZO{#$|8HvL|VdGkJ{RNj-R)xun$%B#Vit-8>WDylh$ug{Mwq}-k;nKO$UcJ8BTisFXrK!QLo{k=*l*dJHhr+L( zVUzinr$@#Iww0_%$A>aCVgxd9{`8rlW4#eUpc5Ox?`FRdB$?h~mmx5onv!pa2v=U9 zlw@|^uJDjO;o^nAx;g8Cw9tO@1kXJ^xY9kqc0&#vftWdx zbpSjjG?P%v>iVcq+W-BV^)~2|O+>oVF~**IL3_TO;=Th*@_Gx!;ip=%v=1x-SG~h^ z0{`inWi5nWoX{|qV(-GTE5-%)(s~7Mj-Rz^4M3k>xhs=4#+B91dOcH=amXjzKzI7t zIldfR3UYcV7I{3ijPQD2Lm-(D6nc#z-IcWcaqf{~Q6WNblxa14Nkj7y`3~_Y^CyXP zg5&ui5)$DfDpfmWgE-79hF$PRYSXv8=wsSZp0KPTOPf;tBlPVkv4-N7&6cE#KxgRl z!&2cCo~38U&4bj0OV`W))({B@qpt{U4xqx*A4k!2gXipDxFyxz4>9@Mirhbp58^Oz zqRSw4`!NLS<$ZhEia|HGC`l!L8c|QadXL=)-&P(r2Jbg!cm!W}0~uk0G@@o|kK>7L zUkLM)+4pCL)yWcY+7}XVI{D+L=kYC+{%|?&l+_T5_9grDP_RekPAu`}b!jDRkBU%L z&W79ikuDj7AvIh>EHkj1Zp0x%qBS!5=PTYw6sXL=ju`5@wZF^j~J7_rg$`|Y#U%1VX z4+eYzikQs%;5ec-;iF`1$Lp*hP0U3>~}#SvkC|S$ljj zzTzTpe_pm}|9D$qsCb=be2_3@_&o`aq2SG$?bNkcL;j7Ey9x8&W<#u}kj z{RjC0+}r-sXA5#(!A^U!EBkGB%YBxMNSKrR3i@aJ#a`u{6*? zA@uA0v`p>bg1X?cOLVp0ZRkd|n0xCzthDAWq*1k9j+1ST$i_r&M|!i@zKi$vp1qVi z<7uK?=M`4|egAjNWME?}DaF)tL7K59IjKbhczt0oq*sRuy)?*_^yI|Vhdf%QG;?nl%+p>twu(GnH%@roCGr?Qd@WgDLJt+7a?Angi~(QfGwP6&OsD}MYx zYWdXChsKNl$;#If&$1FIudqfFIi4Wmo(=pXL?m=`x67y%-9QE8KC{+qa(`ijIuxXZ zS)ffLZkik-0$BndGm&Xpy^Gif;+f+G+*&2>`84wHlc3Z1{h9|?$KOSNFa1iusmJ!< zOjIRZn%$^>OLGQ@+bL*~EoZ?sJ@5IPyBurnFfj)XZ|eFp+Vh$<3ZcNb>_Vx@_dCX= zs{sQmR1<2xV1MY0DX(V zfhv_EyY?G;vx%Qmh^QD2c@y53U5P>E0dEIZ{MM<)?~KGPa%Pvs)v3S54?EaA4I`zI z6HFQv-_!dXNGzpr(ns)4aBclc9iQ)xgyZqjl1%P>+cyLBQg^jw6fnp5lm!U*fT1&x z_R$B^Hez^w?CGYo6V10m!uY-q2O>PxQIY9=edwr&rab=O<1padE&A$k9irHvtAOfR z=LkO4U60_2B$l;#b#Isb7TJE4RR}_X?4xxkWj%<8LgK!9azOBUEso`lOer#TuG1NF zccX7`ClzUHhBE8LJ3|hD2dP6Tiw3VPE^4d1Ry8o3#ZjNSl~?B`tyodY`VjdQ=98#3 zv#(5SxTCG3-<_halk4PXax3A32R)3bE=sNB@i3Q{#Tet960F;kMJk7eyNAKd9bM*6 zpJ(&g?q4B{j$f@+djRU~{A=7x zBKs*1wDRjJ3hXzJMU9@Oi=<_pwno2Vzi0{)`P7s{844vD_Sv(yY!QB5c6RFOARoAU zDIa)oWbSkIyYcYoaD34QX(U1>DjMWn(%_N1=U+B+QccAPbpC!?E&m22Y}P;D1UL~? zfAjQyouR5_FSvBEChI!8(5FtQF;8vu(h$c2YLsRhn0opC?*RZBea$n)#BZmKQyDqW z)QaIx;s}5DK7`Tmie&sBs)PCx`3k0(r1*B$G+DN8bt6aj?Z#`golk*}tf8!fx4f%i z^=77_1E%})lc#sTjC{LU8QH0w)T-VxOns zjr3ee^Q*^^76U7FBsC4c*3E*QX&{J3bw^+cJm7upO|kXlNCjyMSF&~2Uyi`%&NQww zaF_OZ+{n?RYV3Fuv9m0-|!v8kF)mC;vbp`0~T|9-pDZr1X`n^YIg)S5hmdpK3D zy$vtgqPJG^%1DC+!#4ednBB~)(g#K-Wm66%qfW0rFsuzgyp@9IzaMU-l$;wS0};8} zMI*SMNXHj`%&fX@#2Rejht30@I(MDsK1tOW*Yfy7SSp_fUiB+h3k9vZQViTU7D_y- z+EKw?P-gug%Ym7^5lKA3t~;M^OaKCLVKfKJP?!ra_&h!{JLM(xa-(_~{0Y&QSPk;T z!Q`bCeu8UtQhGI-yV~3p{ja$2h|U|neO{Dphugq%4J~#Y0zsJgjr^R8%YYeY&5Ad2 z?K3Rx$dM-s0XxAW8pKx=tOm=?f&GZqxM0jJveoK7h^OWCdE^e`gve=nO_#vu*q!T7 zXCehV2;8pk1{2F(;yrpd8V1tK^>uuV%ysozP{w584I4;kxj9e4aJueW0@me1tms)< z*(=_*EN>*$_2 z%65s(tkSUwWidD9{?_H$t4Fjf)GSl@vPk7s82b8jik`qwA(zV-mzU(I2bq*H9_-)q zGv2qQhs3QU1%GgO~bZYy4%ucq&yI&KJo2r2s8d#Hcec}Tg}5_U8}84=njk~xqroTr` z#ukc{?Wg6D*OJ>AHLOQIo&cNmwZGiuR!(^u#1`_2TN(i7c*r|w_mTJ5_uAc$MC5az ze$shio{QkAGe+n1DZrv8uw~ed=k^|3si=YU@6V9t9!k^)Hs!ZTnA68_UWQFy=8_jf zi0NG!J;816O73n$pKW?<%6+%szdx=+)>BP$yswT*eUK|IKKnay7d4<>{bNX?U+G-A z=;O=}wCJAUA2A!ba_gCCYh36EG-*R&sL=krSq-w4WKV3r1bg*s{=Ef^!ikH3WE9Gy~hAcHRNq3*k6MaP2ML2s5E_+ z`_tRPDj=*d#atKV&|XX^Vt)M4z)4QjR#ItbO6%?>6VPg4omzH@Ujpwvb({-Z^JN&a z`5#jKCq5bCe@S)eKP|J<%1!+y$0dJ()Q5wEQSw2UIUO{}*Tp4c!rntjmVsmHI|uj$ z|B|z}3^oHI_S#ADTb)+IB9kFzYc9uc>^f)OX>ny0KV+KargqitW4~kJ<-Zel^u{XQ za!CV~yX@6YkMz(V;F>dQ8wuyEWf1!K>ktwg_~i0qsjq0`mKC1(f#;_m~d(-Hh^hUf>iS)V6Jn9R@qWQR(pAp>tmZsPQyxSVCixg_y9* zCgQ|2O&6y3)pn)XtDijld9ckphw7?Y?{9fNRo#Ef^l*uaC;(XTwFjo_U#k6Y8RQy@ zud*$n0Z~M##QhJq1Hlfg=W6*QO<<=CCO`UpSi5Zd+z8hS_+Lr#-8k`cpKA#9cukTL zPSOIH;5Vi4Jpe&|7$S)s02J?=i&ARQ`+FwWm8d)Uaz*-A1Ua409n5*5;ziJjVAtsr zAEx6BOR^;7qC4C*jEf7K(ez4IuKO$5SH&S`05|Y7QseQ*akk}+D%V+;{YPY+H;?LD%r;c+-?Sq;y9z_k75ocd_&adOt6Mj>tA_KrKhxSoM?B{sC?aM&}H@O{-wt)XbEP_SIRrBsEaWPQEr zac{5BY5-NZz>QM37G1?weC*$tV3ghTlI*E2dT*#Fz*}?~>ZpOsOIe@Kb2a9TX587A zeb0WKi6s*;*BOzVr5KSsPcLGAP->y;43JHG-IN76)CyKhknjM`7Oo&YqJ%;ANfTyg zFLg~`6^r|LYTL09!9QJgDC<%4{a%_`npNZNR&l0+@#2G(8p$KfFVOlhE((ObaKAoV zJ+8LTG&sSKN~E?|Hk|!&prT53alThaIMKRpds206>gnJs-jEmM*4UdV#KRIH+FF7j z5!H!Blk`a#`ENSs(K=qva0&$~%p@xwKD`#$ON0@wnOWhYo%me?mjf?n(ybcS8=b6c+JggP41>4M zulBmlCi+x{u`8~_&hpb|FmGnknPQ;nu#BgHWs%iU7RJ%orBqw;n}l=5e4V$m?iO_J zO7YqNy%Gp^n2Nh$7o;&>62lcl`dawC!hHU7ZA2j>VwS24}Y*LQv z+gbyyDx=CvuCC?F-*@m@cw)?g-BGveHFT%EMN$RZE&Ym%r@9PaYf0xR7|X%o;>n5a zEJXWU-l1_8j-AE1qub$^tqEohm;VycKAxTjwmHUmyE1^AXK{z=Pmezm#yKnF!VhA{ zVpQvPc0Rxd#&+)Wuzz;i+4&Ruv@*|79XLDXn^l)&PuIoP_)Uk(>LpFT*tsVZhuL1v zcUOU4Rbr>%r{c7dCv?CY{Ph6>vn9zClRhCt$JC;vluFva+w^dQN5H zn>gT%ut9vR-!Xi{rL!DG` zo5@JFTVci6r<462($?sO*@IzgYz^qh3wkD=9l0%e67MtlQq_Q3yZ{+|)tW`K)=Lxn z{TzO|;Bu5whySl9iav}a-J?npf4AMfA%anlP{j@qkHfLal>r$&xp0vciOn&YZWxQeXacJ z=@>m{cs~*))`&i%CuXV$@oFSXJit=ZytGP8NB8j3_q{btcAu6&@P1qb8(ruc{V{dm zvv>uLr}w1@kxdnQ1!IVKhOT|V6wX8a-|$6x(=KsZQqF;1l{Vhm zqu`qYR^)uO0Y4YC)-F>t-u4vNiiOY zb{Tfjid(lEiVNg`JM+z_fM|BN7e6)f+Xe)nA1lC^FOj8M?^fpcfnO2-W~s&&--qrS;-To+<;t`uY+iIDjOl3&IfvwqRBDS?v-EF z@aJ%_jW2u~WvlHkBU<$7N`v4)PisXfp>f(o_~AdpCMw-0nphXpR{upe7SPzyO7L(? zrukYhBP}I8!qj!!&~>$EYe_d3u~Ktd9s5i&YZC+tbC{un_!=1pz9#)^M9ESgMRI6Z z%<;R<{O#K~(YL!{dj|E0=u-&h1?JnA%I9sy<|XE>_3r8szOI$N8%GCLsSlY5p6q9q zUE31fZ-)A4wDmlLytb7NCgX1n4{TGM?8uaiDL?khK{|X){9WT#FC%I`Q`D#`>LR*1 zwxMHrF~tlX(>-2wqdVeGbKsp_D3+JH?RoM9%3uW9XV6BZ;+_*RSe|UPUur|A{ zYdaKoDDEC8UZA*3aVuWjr8pEPKyfJUMS{CSad)RkDel4DCBT>aJ)ZyH$xf2JYh81$ zImb9hAlW6{w5PhYaKOXvKpYCK$OFxpliv>6tEhYQfyPYq`+xyOFZZyHb4Z%;_wHRp zLpyTZxax%c#WJF+px6Z0hi#&6*u{why|hVEw7&R?FM<5iU$3D!)FbSZB;+`It`z&B zj}pevL{)sw&y|+SVv=QRXQk`J$c{#sB$mIi(ETU0XqN2pHW7~k>kCh|J{{p@v)p<# zRGpIq|3nH-xHQ?uSs3MUzN}AiurCUY$+j4-C zuMvp~n2i;(l<>NW4Y-o(-_zrfT$f)@x9_2X$k72EQN&tsv12kk&;Qf1oH$?S8e>JB zTMF_*pnMhH40}a@Z@9Dr*BlBLYpc?bELVYZ_lb}6wuqfkgMw_@^||w!0yHhH^>b`P zv4HuzYUVjWPy_TuH~{}zX0=0#T^j5+mDI6)^lGNo8@R5lPOVHV{iJ@u*c~tYbndpj zm_WU5n9d-nBIzXq6lX`>CdNS+t2A9Wes&%;+R9@Mg;_ zrs1aBQdCezY;sBYvL~zu;aesJzLfqexJL+y>DtLUCoZJXk*atQISIVjcX;$;pmwY) zrR&3^a`6>KjGI0V+1S6;V5Y!S8t+!)$+@QSC->J@YdHpI=5i7qV!DM>RHIM*V`0i+ z%bfo8KQ)O5|9Q#OhgH~Oyf~9k`cb#Op8S9gS&Bia0{*7hVbpcL2;=(o~Yd89(J;6D(JoGvU9(rsscP# zXOt6(2#v3e++!Xvml(FGMGlNd>Dop{kU?G?hkyg?nNQo{H|mrFR1Qyic)FGx?Ln6J z#{9MyEs=z-XQa*a6ryw!k-q55gq%bXan|@>I2rH&t;EqD)-e zJW4seEj%hG4|xeQ&PyKwNs@~@D(|*Yx(8rUIcz2m2M7^KelyggbcdG62p*(vyI}Ve z8N|eWC7aGv!UTV%5Il@6#F*L@JiPj=%2FU2(^rMVl;auy79&l0eAqt9 z=fEW|doeQj3lnB97?CxKU&)5lU$VEg32@FH!L@!YR_%`YC zDMMh%2(Mp26v^JONd2d5eE)c52v?GDP#+i-v2}1p++Ke#(>DmMIbJ^3U}Mjngyjl@ z3)@uo_4Cx6Qxku2ZCOWtt@01^L~|yhK9-t4g;STuDz@7;WP-961{v7n_|ss9g+UT% z9nx&(am{+I}oQ^Vh_$@ApQ(+iU!0MDHJ+mXE={!*^KcrOKb|=|M!E%ev4HD!=t8 zmOQNt+$S$}$bC~(krpzume<{FnvXPu>?TfX8N78mR#S~V5dXvmPtWqn+P<%&b1T2E zWWMG?%%=z=gUW4;mOooHoF-cyjvzhsd9t!#+Fq$@Zr^iFvp$(@FZb+s@WI;HM$6Ky zArvCp;6yTrY6qmPm#q`NsC#|WV>bPZ9#oa8;UJuNr|>l#RTXIK_2Q~0Lz)W{T&W;T z8;8M+ksc5Bv`@vZZ;fLP;S`SV{0iV)c?EggZSw+$F%8K!9v^b9PO%NCJ)oiMm`VI7 z@P8;=`{Y*j#;&QisWD2xf$N^`=8w0Nv)#m>?V7%K3d^|Lxw_m-B#)=B1ueP7%y_ zq(HN5=anBBBBb!Pdsv919EUy7nK;m{BM)uF{hatH5gy!bo^tm;n!wYsmkTD^j84aYaM|o}L$J;$t6mKk0t9 zN11`U&vou*Hsp8+bINxg2%GI?4)7;a&o5xM=lj<5&sM)VTd!nr4fTrF$q0z}ktV(Z zLroxdUxRFtK0Z1fC*Fpw4`chyV!tI`?L9CcbmQw)(rjvoTXK}!wiI0X&19?J;0MoZ zKU%;b=%c`9H{KRsy({4obUyduRPk3+*p$H~K`&lh}?4A@GXB=MZMxqeQ*>(w~7 zIOiA&!mWDp3M~$G>_!~EW9_vy1#&A~DCkFbVaEPbD@ zhyrK*2l=yV=shYR#Z(D_6^OvKPlo^Is4^D@cA#dR>A`WwrB zIbMvtR%<15LN-4L(vYVtFgx~{*#J{%@Hk_6+To?kkZh&ut7CJ028BiI>EDut+4Hbw z70f~cX1L6UH1`jkZbiY*61=$92bHeDM|yM1Y@<)7{-d2DqjMwAO78T7-oGXkPsyWv z4SsAa>fzkwLY}ZizsjP0`7`MCK3f$~=qdA3D<|it|4r`%$>a;SAr{8X`gZfV>#VOD zv;-CKM85hZpfDi1@m*&Vrv@oZoh|5+u)#NXE*@eBDITZ_)Uoku-(I9Du;bX zTpq}a72#U;cV5}YTHnN$}qevt6 z&~xHOIj4t9qKBCyp$!Up;z0+Ep`k2Om;G+UB*2i%3-lypJT9`(S@7qm_c?}0i{1B~ z=iUXOTc#fCR6k={*=#~iET}s-UhkS;*a1N5uIudcMexfK_|X^6mf>YLrSZxUDE@%? zpxn=3_)rie!}udo$mQcsnAqxv{sR-HaL!0>LDcQYQMeolbt+g*=%B-#c8WD}uN<43 z`-9a@JmAU2^mH_c%YT9~BB>@MHbqM#jg-LzKfXKNly@xiK79c%%1_7d@2JzZ0zv5a zWlSMq@fn>4kMYVw%L3O*qA0GH^ndm4I)Qz=PZP1$l@>Y08_ZH?@DiPS%mF&k0(@5B zyPw%`t?jMtZ{XyxQSfZ|=+Z0uzg#F$o`Lj?uG*K^G#K#2H8&kcR|%i#bH+dcxf-jH zCzC^~!D4^v_I4+LQru*o#j?Ii^R>0sWhm;%qV0zp8MA2yAFL|;$RW@k)Z2@@x@Ja8 z?$^mX@g&eHu#t+slM|G7w$ZGa@Fy|O__@N}4ijYY zHU^y7SM4oCzVX6VF=z6zC(F*OxSt$&rtN7{)8}wM4Q6Mz#q5*XPtg~ssyZZsGa&vI z)1RwP&MmmxS=y46VWBfCAP2L~$B|{X(LOuJEPx;i8)4#CCVv5l5QWr=<&3KNIfa!7G53 z66>>yNm-SVCbd_KQu{a7PA(Ql7fCq>Wl`2<46M!2Ynw_ zI}-~=4AMHwgh|)?gjLv4@Ahf@dY{{-7_1~gD7K?k>e!&`fsMOSa?3!8mwDqBQ)$x9xk=GS}`OZJB8BifaA- zeSE2uJ5szISvt+y!BR&G8Am69OUj0CDd2HuptaluDh!03Ae!DMJ4q4Y3P0J3ilklV zFpQlCk9EMYm6&Ff_vx4}1*i#EAe_3+@J3%d@2_DDZi@$HCvMW>*nqUka5sYdE|T~1%4Rbu#U)@WeZh9lFfPSfmt z7;i;T<(IwochdNm%=xTiz=6=EtyFgLDHy_Cb2>sVOr3$jmu%PfZP4?M}U?Q@Pv61GE6l+Gq{yz zJ@QCiCzS;-G+bp97ak#4yo{dBxj2xGgy*xsT%Q#3Qt@#arb3U>BcGH!7JJ z-^(G7`Cdh{j%iL-Xtj^R|ESVMOa+FGIKi$Y5uV)WMEKnw@UEl;5{yalFTe2a1_`HH z<9+;qyuF(}0hld46uwXtZn+jFWu;b9D*rz>$jOCYAjn_hdu&Yq6drz$7n3pqD}HDn zb11dr${);Nb1^@}?)prig5%Mfy-%DloeR^`joA7RByh2wXsQNYZGg8q>la8lUQz^aP?y!bKKa zn=Nf1=Y#x>ZC=8YLX^J8WuCZFMX;WX@Z@6{-6mrw{r9Bgb_>C!6cbvP!i~U)8kNGT zpXeQW`Ci&Xu8S49!Igh1SgG|YKteQ9D*~VWkX?f=0_Ky z_-EHF>TT33XC(wq&XAgPPCGsA@MTewcn|oK3PTFrlJ5t5`|A%;Yrc;TD?(nQ^~Jki zZe{Q;Z=C(itP6(i(8)0e2ygK+_pPE+PsIm#?Frci9BJjic z;Prwi>N$d{JEUL5FC>mXfe!W$bA%ZVT*gB)m+uGk-m(YGbp_`13-k)Yc7-(2NJH=R3r7M7osQoFV<3^9EzSnduAAQh z2GW*EL#war8_&MzMVtg*H4xQ$Imyo|xLR|gx_{N=&qXh&wG(T8>D3e*^Cm|690cb* z3{)Z^jz}=2On386Et@cTKo8}c7^fE(-tp%oMFT-UW+E0K?-X3Tr5HaF`0i(W62{y| z8$WXafy=9PlTxrlWBlk5pjCFFkDohL?O4;mWk^sr^^n7l8xV?qVW}0 zFlt2ey3hE=v{N4rUrbCxtIcjlFp{!x;Riuv(6ADP>4UOB0ws#)Se)=5oN>%7;RImL zT*QZ@7e}WpK0yE|X_~2Bxrf6xg43QOe+zHA=JlwCuq(${^U|7tIN1@=__QdD{m;6M zCMzw(UMDdOU4aG3xzawkR7~ujPx(gZHj0pSui0=GVZ|nA9?H3gh-$aLgP{*!j@BCS zRlOYgz_SaOXxcjrbvs*v(o=%c8gY+hYK=`pi#(^8Eh6s^M%Y< zcGn;8(=8@t96hHZrA=w&FY+|a%&!fi4XI;?7lA1p%)`YBQkCzzRldECWt0*ki#zd3 zT(Zeo(LMh)pO+CMy|X+(|6|1&NaIuO1hqF4NXwfVqSd}qRLOww+C_@p%8F&N@8NrA zN(TPB*L7*Q0xQO}u6i*i?U#Ee^g*sT0))w8==qqG2P!6fMW%Ljv};zBNT{btDt^@| z-jQO8)%r=2N2&K}uA-%Bd;R-HPNQ2%t?fUX`o6nYWAL$XvT>Q|0X2D?>OlxXBsqop zgGitX;ojBjNVv1&fwyW4F7QO{)kqw2LoFs_SfjARuUZl7MdSj2%A{X3rz*Tyhxq@x zfV_UdaS>PNJuWpJBf1TJ{|k#i=J)WRlf|-oT~%6lI{(rkd}3uPuvL!bwrY_x+KKrN zkz=Ilgt3ojc_iS0E?-XQoED^YMs8u}6AKd*mxMc;jXl=J1kBDex>?eUUT=8uRQOQkJu~mCF?QR>M6gU3zDWe>$Ew zy6Un`{fMLv9earsX~d>{TcynMv%tGGce@SezO}XO>*>Zy#!0F2;jc@2E)TyuUs|bw zwrvl2n`NJ6D1Y`J^elanf*GtbhTJlav~T%zzADXUIjxIyW^Gt9?};&QfugV6x{Uuk z&Y(g(4GCX6b#d93Z{`Mmqv5Jjuj8HngogXV{Nk?bHIk4 z&a%axptt9Z2EGk1!&|;tzP9t*fA;hO*0dy{ji2Vv9w;5*yY4S&+5}+IGOC%sTSG!K z%`}X|PRl;52Z$7^zJgdN{&Ygf7jcw0e1sCi<*(@|;%~#W=DQeUX`!8k@Gq1;>M9sp za_)VXUAlR30o&C61Mp7ZyKqXXLq>{Z^fq-U9;IjB;I^p;Qf@GVO6ii4EiL&u?deI_ z=F0#!?(1puhKF8+d;avmz}wz>L))88WRR?ntdrBm)D!%u3R_wp=%N6uD^<^ptPFzf zNgGEsUlUB}g|Jc_ckL`%Kc^DL)f8x*v*K~B05$Ie4yGf`Khf-CBT4<`wq(grbzGEx zE|5*khFndETiQ!mpd@oY@B~Vrz?;kT_hBOSW0_xL6o)6+QghP9U|D)_(*DG_=0bf( zhexCoAwo>#i$Vm~7i41-(u;i_izG=GHhO69T=3C+n@Z?#Q0($*-OIRxif8gB@B z=G|o?N8hDNA7Hy5+cW~~{J@YSC**7zi1k{>#JTrLFY10Za z2gNtIr{2MsO}|tTYykOiZ9|Jq|3>}lCpGjg^26Mp=BTSvV^Pek0soS@a5+G^B0V-d=erZSKaxQ^$feJUu!#8AVdRb6pa z`pn9|9Vv+Jo+R}s6vDs*U;c$nx}L$uW8`Dx77i#S2~t+#%rgWua;ghb!!y0)Ox^D8 z7o?5MDS&P(6>wcisDoKGGP?P086)4E2qBHt`OFa%Q5{=pVchISiY8 z5pR%bFuc+_n}%a#02<|0WRMr-p(1E4j!I;1zFi;P&cap)fMyGPw}|QN<^1n#-Fwo= z`w{aSQ??Rb;d~Ma(sE+PJ~{S4NKaWGX64F=L$^Tl%jZcR%_fnLR&l-Q5BTNN$w(=1 zte=%m0J;9I&B*OuwZ56jzT5E7@i<-12rXDtpQ?$$dyK!D#YfbuY!MrEW9y?t9-COk zQjK7q45D_=Dfucx>92hV$+j0C9jZw&K2JXi9x>o<6*xvUN<{NCLq!AU-y*_q_-;Ka zR?D(7vptT|(4vGBy4{*#9&?aOorti=>3=&X1EPnswC`>Qo4SS1dzns8+r}pcXbH$( zvBpZ!@Em77zTs@R2_lnn13)6Purp0^;o@aXG)8h#RCPeZ)E zmx`eJT>xy+-%ta(t+<qd0RE5m*wZp$N@0EYTpgFe+)*A zq}t}2h#Pe~VS1uto2ivoTnfMeeS`x6E~U+LC8Tiqw&<{C$ztHU2SP<=^>bS3#7^FC zuClW$7voXqq~p-M4Zv}Fe>O8#u#UvF72%jtCp3VHC-0{RX$tVhJkuq?>$m zt(=@Fv@TuQl^Ir+KbR@Xz#d-)&2s?&y8G;d?(6`|1Hkigy4un_N9u`8ZR#y*Kd zl;Y&3=thcosdzm}#}C*1RwJwu(`5M+)dkFIV6`#*gf~*lAC(zMf%1{y-NC{Zj#adG zhXR^DMlIgnPv=ZJ7GJb0Mkg5oyCp+28uL;oqH?kbzrTtU70~$(!&b75*rx{<)t!F# z%DyjCM67tKPY7AdKPF}Kxi25ebfJ;UTXf&%pB5Z{+INfmE^wT5^yF$U5)_*kYVZ1% zeN(V#RU|b076DFq%b4ZW`uf7pAt!T)=BE?JLe(&U-Mai~s&UOKX}=6x@wK*OW7I;@8FuY3mdEO_jg?fzU997|jf$J{c}(NzPc~$|l0imcK?Md7)?+QB$-dJ;Y?M zA>w#!v#S!~V0khnKeb3L%Hy3|z;PY!BjDX6jC|aUxlrQANp-(souzzymk=Hg8yF|( zFF7q%95lo>avvUPCh9s-Rxmp~-UBxoIY{4Q!1tT?)iU*%_Lz7?EPYtzG|vb0IEP?b z`f{4K^k(7aIOAOY0n~CQAtfbILd~|p7ckql+64FY5Fy3MM9<8HGo4={_#y#FN@$x` zCnLpL66Bf6NR@tKB7~KM&;j1>h*nJWCW=XDq0UJ_ZX%Q+^%A4N!A#+gED?s2SkASn z6@t3bEgx#x!ssL|f(PNj?<|`SYSNxha|;`p6N=7F>(gr0+)Yyt2a(3ad}yYaksmcB ztEh&#HPw~;$Xqash!pC~WH_RHwcjhI)*C>)x2gd;_$o=|N-t!daIB!~VMoCB_Cw5L zp_=%ZA^iv7_{PEBZaZYYa^SrylcmfFuDLl8zDa47b?xc=<6`)J6j& z3Gkqk3d-$#-Tn$wv?fsP%eIs-(dEh-Q-K#@_w)`5AICK9lxEl9Hogbt!&$J~m3ag- z7T|%viDL1N+K_Uh6VA3oyiF*O;+>&TWAQ^54XC<;ZGPX*ZBFBIua5aFGBf5W<2$MO z%D3qg5AKGQ(^Lw1%5@#keOAgqw_C!ezs2vBEv+R@?AS6tC~Fi^B&`XTO`wUYJ)5Te z{I&UGwz5~?H@|C1FMD{Q=CJCrUXo26UC;BdCN^s1wEC;B{+)c_d@3gT{=|dQu_yLLYL{LdTv>LNoIdv0lxxj94H{&z0_#k- z93a%T*|N7ah9X}W(-~F`R>||<3}pY?)6%*7;Is+Eu71F4>r`tq4=>qyp1K#kaZ@{B zb&;h69H7(L;MDsaa8*)zm2=|cf ztf45$><5&%$9}5UKhsTp&@<2OZ(=YCbGE5D?@#9$H5=*G^_NqpfR(QQwi?7|vJo2t zcriSrNWg*iR(0}#jmIg^6J)W6pnYV%bw!`;RF_#*bE|#$7)&9{AKPGxce`SaPp_VD zXB*xm3546gfQ~dI6+x6>5`4%Hs;kek4gDN^V-B~>?sIa(-mB!WqLETklAj-^FT3)N z#sXGEnC_<&O0*o0<=9%J`^>(W5L{3pXa*6jR!j0l`$%p0YGYM!NFG+xYBXsQa-$X( zQ!<8Z;19@oT+3{1w2BV)aihi*y?3K>q93`D+$phpq zPq3UJ-Kq$i++A;I;bqoL9RBYBuqpk^m?k;XQke>hkdyLOnoW6S%7~SrI^#?SL-TeE z^(PhYdxD9N0uob;m}=ASEo0o3wwR+N-Fb;%SeVQ`r%X#Ic$XuVOyTeY5U^U6HD$(?yGYOzivU}B0^#`EbI?8X zCq=+ao4VzfHda!XNy?vevoTpS6&8{Oz~HjS><9rB3(-0c-o{uPRR>E|@)7!;uGxl? z-v0HU+~#vI9s!W2O#T%+vAb;c6W*f*_)6Nh@YT{K|5Q>5{{ib=0`ZF7Y6{KR*Tm3P zI`K0*G+yl$7L8vhCiwv7e?-$a>^|^L*O7i^PLbFj`mecE@g23~UZ;10B=rDA`&_|9 zoZ0F4)NyEx0Vf7#2{SL@V4JLqAQ7*d9!3P=zY5mB-bHx8_yTb-i-+)Z1h0$MfBb`1 z4nvv$P7FK+^%I|a(!nM5NnVmvT;zL7qt9u?f+{zDIR2V2CG`DB+X1zd(`Z9Hyt8at z#Cj6H_Y^|UzSx`h^V7fXGtYcU^7HH8HU5)vPg^Qqk{>(J-$JCO<-YQpB4mH?`RpE6 z$g&$N_bp^N#&dYv`ecB}mhLo9haNOR4GJgoj_^?a-!ZBjy9VZGjdz19I1B_#|J3Uf zn1FDUP=1tA&go5g+xm(_W+G*(T{3OSLmJ|a1YV| zG;jRq!H}RD`_$~GXs!EQIO(@B&y~3omW;XP_SN%+Z)=Eu_bC1{N7J-i5J(6;G71X; zfq0{gb9u9$>U_-YVp2=>nk#!9gPsu4_}nYhR!MLgy=M;(alCK2SePKKOv69=Hmp%? zKY^B&Nga$Bx<4 zH*x&>`VaUUMv5aZA8lr;iH!Ti#73+J`EsLoAua(CmiQPONc_j_3sy1%G{oTN2^rVb zBfU5dla~@yIa8?^gJUIH8Vb2b&I!|rWDM0oi}LEAl$O6#rTl?R?SX;s7{Y+=qZ5!k zM2bx%cGW9Ll*j?(y2*;fe`59FPzBrnpPYd&^nmf-%zuYL+!Hx(16`7XIOHn(+?)J# za+GQW1K??qKyC5j=55T?esVx_8J^u@HVn7n>F%31G5m99PHI$D7YG+091p&X^8@5z z%e;ky-gB=Tr#93TXvDMtUcJR!OpyA-tVXzL!cB+SwnJe(ht`cA%s(&H)`TPUkCZ)o-+E2#r3;0_O)AlK8 zfNV=HHLEr{M=Y*{$-I6ss~Yi=7j0euS1k$Jil7j@CWyH~S#$5V+`k6t-7*6!NUxeO zw$HkFhJ8M>+R%tq+0UetL&z4MSmw6sZF?^4K|k!wlQx<+9#x%Z+?__}n@uE0diPO% z=CD@kmf?4qZ=#}cLWeiKKqH+IVE_a^GrDGvd&V!f8S6GRlHa-V!4=|EywSS6DP6o= zdi1;K=kJ?Kn`4+AgRLFj>Qgc5tUsJaYl#p%=dA%ml4Z|Vsv7#1ft0NTNR0cTOM`8h zY%4LA+c&#v#fvKz^EY+urYtgWkwWdJqUkV3LnE-B~2K zZD4nvHAW|c$0~}fU!bS-I^T>nMa5M|Y+pdS8mvna(^auw&)eMl z?C98xRV0K#F)`_sBT<#M;!m>7!YH`5~L?(*n+c^^a~jjvkl#T#Om(Qb!>)gjKdNIU>Asj z38D(vj(pl7pNJwMT+5reJ>^it>leZD_4EQD!-;0(c5PQ^7zU|#VE<=*)m3mc3u7|p zx7??^l#V9$w5tKopi%h=96G6n;$=V8i?`4R>KI@z`E<*|`&4kjKyukb-MADjl>IN; z^kZsx&*^K*9T&&LV2xU~+svE`hoy|mK+--2Q1_)@rqq`2ovQ#B0wheY*qLP*&x*Rp zS_ns0ZMQ)Qvad!me%OjC{a9JRoIEa!uHhAYrUvoG|9-D89R5DwxpRS&poWJT$RT=S6X7;mhS52 zc^{sM)NSW%a6XAErbOaw>U=dR()wVTR8Tt`+Diou zB4Q22oKw3XCv&?$qacf844pofa7c~KJpA6~(fF_7?fGrz?GSS}HT`H`%y)Wu^($k< zr%#-67{3Ts^x;;Xn)R?>a=f{{X>`G>DvUc6mwl6R&R=P@f z#ytHY*y02u5fT$r=b2+C)f&Yj_$7yLi0=Mazvp&Br>lJAgI1jEr2XC{ZWA#M%aqqf zshSbPz587zxX4gbaS9Fgq|7F73#wjQ{32%B)^8F!UrY@sU*2!h)heE@_iH{CtLWi7 z1gfWW7aQldQEEYizZLz>pgv+a;Nnj&x++RP6w@PD$|x}d>sKhh^?fA3a3o-ia%e6& zw=TZ(!bM;`vadVR0+|hd6K0t>bl=_6k_doB%tE@^>OJN@_j4O(_#KzpI(308YC8OE zvMFCQ+BW%`Cx)(zF-tJXlrwqrz^n(s1;|(2|E?qNL*dC*OnB=|9SWVK9D||r#Y@sJ zlobwI+70UUif4I7#r_^VK$*;;huKmUd6sV%fSl!^bH(kHm2WhGoRPC>({cZY;ndr`!u>z{F z<~Uue*THgJ%I<_ecJ`Z=?f^bvHyh2iKP`+2|@tNz+EB0?arxfxH$f=W+@%gJUESA%0rE0~n=&&xv^(k1^=Uj>`_MAmz zI4bhay~{tKSagMheWBg%IGb}iTp)P6KLpTSAJSL6k0ea1CO1psK&h&ye#>?Ev)-P4Uhk+RxNy6P6z$SmNbh} zvei(vi4lkH~kA3<f%vQ`cc}OZG{C=vAlPws`X&y-+qqQuFoF){Sn=b zqI|5T-mjYEBdFzr(vAN{2=k-)FDLd5=2iDcC-gJoWh5<#zLsd~Q=RgrP%UP){%aQG zpFZec%+TIm!>8(Y|M|P4F0|L*FuKcrz>~=H!oM!sM{mcs=C`x%hPS8gCk_Yqp_x!_ z|7Uu|@$4EJ;QN+=5B>ps*T#SEeH}C7maE4CZq7$AEzz14UgM#LcgDa#KkQWS;Puxg zQC2IhSJ;_t9=x>K^kD-sVqwMcba6i~AyciipZlA@0=yHSxt>qEpV~dVo~uO!1b%DZ z_x#F^#gxUXA&a%|l-K;r@r38$Ws+}hDf~Ix%yr{rGWGSn8K=OnpA23KC-z_`L>HUf ztv=sTOeC0CpGLQ;;Hte^a^k{)mf03h-8M6#ikE{+X6?&@J7pa$s@n?oBNi%TN`MK} zet2i5wiUc>!DhbIe8c+HSfGnK5DSephsaP>3E|{oY1lR3sqz1&*<<*i)VeVTim^+C z!E=i8gfZ4zS(Gp(z{P2CjTFO~ER=sHtq4@J>MsNKR6(&}y0ch7n+qVilZ5+1_dZ$u z(|Tg^Mb;=-RhDY(pV_J(Pl>SV`w#%!uh}TIhH;N397@_E(^s5YZGj zBx_sL?!8P-X9pU0guCpoe>2wbijPbI^l9o$Yk0Ht{>i4TG!*Si`xH6YT{}vizU+0tt&ji6-p+{?7`rie9h$;IK5AP{3!%aRIYl+e{4dj}J!T%|^>yRznewBg z3qF8gk~jXaQ9*7M>zVD7_$Rq_p}F=Jm>A~b&$8LTmQCsBWjP_Z3nlnM9E+F+Hs9?8O2=_?KpY#mYCPo)OToAA63Q}E__|U`_uZhWT%=vwmSXW9L>_Mm2 z=a2X;qwd|IYvan(OCD5saHWOBZg`(x@>egx_{tcsdr{Qdci}&NVi$z7trArn36_sFA3ZjW z{9>B6)~->$ts1p=igPH>BFY*2rT{MK*gGnDZ^^5kNWBn})iiZuuwnNimZ55);$Y9E zCt@(y?7*A&v+sAGIpbiV5~Mt=F~3mMx&(k0fd3{%w(k!{N#FZ$;yi!9V9(jWHw$hy@!o`;( z5PbNbuC1m+9>-kj!1Mv`%wmcZbmqiBib7F1h*x>Vb%CGFBPl`!G>NJek1r|!h{%Ie z^>=RR?X@dxmd32dfP)=nsPpfdXHh`Ik}K?^46e9z24^&z;Mh0Yf93p4uVk$Oc&L3R zyrHmB@Ok6cT-WdYk|vm0-2ZsR2w09?RdP4CS#P%-4W$jA7_1dd$i1NzYCH_c<{RaP z0{Dph(43Al_OnOPGk*Vc-J~fhxGGYT=AY=mq)uW&(p#kHSAnm=et%jwK5zulZ)l&~ zsO$8{tZY{ns92jqa-7;TXsT+eXrjP#*uOnORaRTipV|?Kcw%j@>g$krt>5mmO6lJC z+oJ;bn>1?l?L*21ibv~Xoyi4O76)b4YW-Km7oAS0I9aL{#$mAr#{O_#^`(Em%4!Od z)KFQ-eA32>i(i!!DX{IUpR#f&mpj*uo0_rSqJ9GnH9W1&aKB41rdrc=x0{NdkNN)N zB9M`Cu>eUl`iy-QZ1AG^5%-T~jB)JSQqGYFJTp+Dyw9ycO8VXCBo@N=} z|J9qm15EJAn~bBk1d*1v9+H+hm1dI)`BGUX(O<6NlO!FC4Ex^ZE$nLS5bS%d!CZR^txtQ*obb(d zvf?-dotThkmQ@Z#a`@0buOBZV0KSomX z-H$s#i4>BE2v)A9m9d9%5XWBDn3s|G3`H-FfCg4vCUj~YRhJs<{oe;H09H)T2P&L~ zmqj+mBrX+2tpT){zCPBMp=`Y(499(4CmxPnur$wGBnHmwlo6$OH$Lwjg)ogj3}6AD z+6*j*qb_^R9O$Q@YlV&% z`%GED$%KE2j|?2N2pkaL(D3Z&w@^G(|I;W_>jQlDZvIkA8Dxc^*g$)t@DE@=AS*{ zF&%1n>s35>ct;Rd` zhaSDt$fgN#5;5{=hy(rOmDpHPnE2zGEp%aM6cD?taC#)1O~eR4TW2g0RN7s?qEOoA z$0ZJ#{HT(yS6sgz0ZdW(g&~&~Y)w9U(G7zA^N@ zs6C~OwUjX>bM{0iV_s~&^W02Qd{id`7M)xj3rqdy0z=vUUL zZ27S7huJ!15$cN*jhCp_`77QygL z5oG)ImB`=Ug#?fkL=H0?vi(G5hG{N|8)5hiB7eJ|R5{0^fT__U(^JoO#3anqhf%!a z#^tVhku+!aF6nTI23IT@o8ieI&U4D@&jYA)H3hq>Zw|RyTR(JLrvvRMelJ&+&H}z+ z*1dPuYRN6X(3;ma*M)%e%&c%gt<0AngQiX9pYP9~rvS04+q35EpTcbUOjqKzn)(*6 zMM-*cQ#X>60*EiB!!i2|v-Q5rA7>bFss|QfBf8YR=g29Nc<8HnHM17?rlsywR847a z5enq2HoCGNRqgY5?6$QZ7vmElULo8KzzgNFBWsh-x<0gnrHN`nz)!MlQtW9T%D(Yx zC_1nX!jH0hT=AQ8i5I)7cf>{XPsQEDMmwvHw$*a9XJ>N2qB5&K&UrQ#JE_dUfIJH; z-}GPthotyw$1#2l{xnP4sK~%NBxgAWTkD>>`?M1T;%Qme%n|Ipk>cCD983c23YE`e zO3M^Ib|xp}{)v`xyW!?RQ!tcQHk`mcDyMfYWzuUVYWBo4DiSgiYYMQ5Wqd-{K38-> zhrNuMbB-A(Lt~~>WOQ_qj~|L!tUz`yKi7!18TDpi{WtL(MOO&{zq_tq%2ibXvKi^7 z=7e)7U2Gs*X{Az$AIY4snjPTX6}G2TYadiT8p!-w@tjd6L%tmsqNziTSmG}$P;~dp z1E~--OU6pt_Af8!ecc#ZLr1>Ypls(A#h^0#Q^vCY0GR1kY_wAtH6A*e^>I=8EUVyL z2#%*`g6EGZR}XUkpp&*t-7@;1SQ1?2&oPu8f9xdGL>+=5yTVq6SI5QPUd086`^veK zC?YcUX&0TI%J}EwInOE~p$3020?yy*liY=7M}HHFsUn>ht1HEi^>{su?_hCI6d%UG z8+kOg2v(js5?v@lZ_%<#n7J+zrtUC|O?l zwmTD}MbIM&ZY5=-$%MQCRej-Dj=XmErT!*=r;QOl-`GI*Mj93^+BDb@VU7p;VW!L4 zOH#n(&17@N?#Gvd?}E7NVg7RHK+PCv>NAsai9@HQ zzx(jL4 z@FOAT0+2m7rS}`hca`e_bnE(MH!DFa-jDbx0FU(a_h%~TH>rOI48My#`yPp%#~`=G=kZEjX7+}t|3wmZja;_J5N8rL z?v)Gh(f7mb&xcfUA+MpF5)Shj>8pMAwi=f+kbNf>Z$j6r^5(2P)EC|T@lr~?B8jd2 z$dtBrJc0O8dKj^4Yj14lP3@pEE8dZeE0j~Hcq3Z)xqC5t$@fK?D0D+v_+m3lHy-5+ zq3$L{%7OGlI!CLW1~W{@|43_mnslO8abbdEe;>YQPY zJ*<+g`=#uTT`3|aqSf%@5p$M}y+C}PU)|$+&OmxPHCqt|hd!O9{HxqAJd zAjDWaG|_^x;#@EMQlL%Z+)&~o{ntOil=@?YPUx4qV_(deJ3A%+GcmDup!sgmQVsSC zqpWpN9+W}3M#dR^cv|^8;P|D{c)E{AzpPh(s%=K$#jLqjV17WGS#Nnt$DUi;SDdZq zXGPxc@BXc7UGt}ijOf#bGaCNC0r#!HQ5E;3odE=dSZN7x_Ui#%O}OkMn+XZhvwA4# zhp*0suYOBBgK=^>kEb+6Q!hfk;P+$9e|exwxv)3d{#^w7m1RPN9z(pc&iFKHV;w7a zp!*w7Vw1+1!PqC)hsVQ87||cZ^Y6)YTdf^uh}Zgx=*!@r=aRX0B3}xaN4w(urvlBk z`v4-Tc_A^jb|Mv5HYW%0zpVy=1pt4Pq56UYZ zRGFMM1}T%eLm$XQmlGC$8G9`{M z)?4xx04DlbW-TJBaLp=Vd4XNZM<{hv(qew!yAWG8E`{L$dQU@)LWm9S(a0b}pmP;B zX#lM=A$8k%|G$wo(uF-}_=vTcCh#U|RmC9dJdvuceCajMWf~Xx9%0{!Uv=kcD}i2A z9@Yl((C!IKgvJVkMq2iQOr(~2=#w;V7!C<5__8r}c%V7R8$S&Ml z$)ZEhUqwsCWr4@rv@z6qe5zqnra=omR}w1ZQ0^mfRI+q{h6XfL&So2w3N)w(a>kxi znn^U@y;`c5H}yC}6Tqe)6q4*y+jP$oV*9OiO5|G-H$2M*Am6{6d~_d(p*Cr1{q0e84j(xK=Q`W4LW|9JeX~_8X({(T6UEyC(Zpb#u`k$;UXfOq>++7J( z-Yj^D=mg30WJKcYh%B!B)saoBcX($r^%pt7++`1S-(j9N3%r0fcRzecB?Yx2pT4F) zf!84v0)ZcnE?ej(Kg@h={iiECS0$|@Rq8jcm5?-@uP*w3_j^+=GXcU5Y|vU3%`u6u zUsJTqPojf!nr#W46f+xyvC#Xw_e(F+r&hu$&a<|&^7MXI1j?SImoqQpfmUWK&WEl{ zI@EQFU5rL9U&HZcb0FNpH5q}mok5mdg2CewuUi^Nt6unqgo~~`T*x+`xmr6Ba#rD- zsG8dE8yTeme*{6MK?6FVbC(Cl%ebOq;MyO7jVykql5-R4XRcpFIc52fv@A&KYtVS* zWmcmT^>?EJe-?Sg{5)oR)aB{~rKGrY<8KURx#eFwuLpe~g-eR5-Vl8Ph6nOb>1%Ak zx=R9w5=A2`PADY;pQTt8M9W<(LgNriCtz=Z&%V4pL~LQ_jRN60j~ajferM)(b9%-` zvu&>lUQ{_HRl<$rBv@>DVT%%(sF*&rvDB=O#K_`H)_j^08cM=WNjIbBNyBiwDYeGn z&|iexvGS!CIbLW8?RJZ;w6a^VU^ zwPiOcn3>Nx7F~HB11IYU1gKzpFG9F|@ssCYn^@Zzd(I(Fd=TZd!@EkZu~+m)Y*|sZ zGmg{72C95gR*KD!X4=C(+B&rV6*|Jvlm)VG64(5-TcQZ;!hHtm9MMX!Y^RyPM8$-DEO(Nd|-u`Kq6rN%ur2B`W-cGwrW*uAxQMu|Q2D4ZEQ(D-%# zs)>%Y7h`|q-QRTx>`PN&P12qN_4W355Gr)31IcgQ1iDVL6Wxv6Q-OMZ$di&pE;OfM z)JBjo;%HABcOrOhXuMRfgFV8%DE@@|d(*7&t)@P^4&k?*HlBCFjFF`H>*%Q`PY$P^ zL=T7hUxav0@n#AQbu*-F-8|-WnYysVffYYVvE}~GrF#8!y)92ngtN#T#_@gSHkvIY zKs4A|bEK%uuEDYDl+(bcc7guvw6jc>cjHR1vJK@&n^%+Pft;3SNT?~OQ9Sm-KC5xn zu$apc(57`LVlnMe_f<3){#LbZYe6%b?ET#k)Ar456|x}QM|HF^>Wg17=K#w1EPC1o zA`GZSK;pXNP?SCILK7SuUcDR;gwen&$+BH7mCDJwSsqL;tjjFg(taJWaIyL&B zTy{h>k&ksjE_7n*-U2V>x2WM^@-}Dw@?)ab@}jo<4C{gX+ffsTtWSc&&dD<1+dd{K z@#csDyKCjJf6z&I<9N{8hwCip6&z+~loRkz?=_17KR6AUnU(M4W?|Q3-|CFM%zMzz zdp)3l4L`oyQCVweQX~A?gd1!CzzVXuxi)O0@a8mDTlswn z`LYvNaA7A*%yf~(#3H}_wmg;Ju6FP7-`pq>c8k~Z)Curk4eh>Ls?>wC0LS5=c36aj zxn;)rhIijy*X$9z+9={0*4^oa{9dRzRa%+Eu=VaLuzgfq)W~L7LSL5D_F1*5UxC~ekuE-H z3JTw5z3GcvB>dZAy3?}cyXV>295m3eZlFT(Sts!9KEnpllX;PVw?g-6#^GA80bOeu zqVz{bUQ^qsynU!h=i{k%m^SH;fzLFDBtk3W(LnR;L9qd+iGyq)KOuf#c+1 zle8Ilv1~CSY5lwE&})?Q_zfucGbOlhR$*KJtkINzDA$;Ec8^KFv$6E6y?tGkm+&ZR zx5%r~!E7FloLO?1TL!<|dZSs!5ru?|45$(-1?B7=?d`s}%bh|iKl|v<@i4SIr?#L% zzSm1iWE%Vtn!E2~aou6+ePlaeIEu+w6ILF-?!&fMk^@wXE^uoc9)|vu`4>heC78=# zc%W&c8)PmUa9(;{dh$Say%Dj}s^ZUjgDVLF?^GClKM)YSV!WE?p9VQqHE0C}+=?To zJJB)s<14o-Mkj~t+Nss^AV%wxOvbXjg*qYgxp<_ITzmFc-ted#>=4g0o*QRVYLn(6 zwNsZVJO#-vUY+hBqs7ZHtT+ADbw{wF9@ZXHSAzhKfw-e24Vn6g8`=7Yy~v=n1kp@7`s{2cQ(v>! zXy-pR2)@nmd{^SCKpCTMA<;#ggIv<6Ynle)V+;K0y_H39Wv^a}3w2N(eR9Vl9Db3c zd`;$pu)I88h73ci@@YidYDn@w@Ps1cTYh;4nHiXOcL@a-y3Wt{j0KzRTFa%>2|8u# zc?G21KhOXAB!$=VxjmNj1lIHIRY7UN_ww#Tztt?^uqw-K?l4V1&{Qjxtrd%$IEStc!Q90>^;4f0UZIjHp-#H%xdf>lMXT7QokL+-OpBDWtfat2q5u$|7Q zE2)bqZu=oRVyDae$Uf(l4x8Gp^M)lz;HS|hZT&z-CG@Ujk^5FWv%DUlBW8HMlnM@lGl z^(#xSsmJ~54+UtkK6ei|;;3J=F%CENxDak9cK5qq2>sede{fw z9#Y?)gAWh%N3p|bh-9!JH>zj}8r;A3wB9XS;33}Yb;Pa@3Q(0b)V1)y?g8%)?~xZ1rpn_BCLNgy}*}E zO$*5Vfg7nfwq`Y|gPdcCrzHNh7ZO^h&e!N%>ujKX6!Q+WtFP%Kx0qBiyLm~oy9HTZ)Iys{TfsV128ZhmVTUJmSoDd*>11@lEa0b0)`{ah~N z_aHl+V{6?P=gc_{8Hti^FSk094AnW8*2thJHD{F9O)tc!CghFo0>wS|@AY(o(`gi> zS2%Wr1!vyo97r*j9t-v1aOSF^dY12D_=aK?Y%|`%K%xV7ba{Sy8%?s4B}(6EOzm4b+%@qf&(xwRN5b@bqFSy9-O-rot&PTxrplvwH6 zyDj2N{#g7*$gL%?`sc0Sex>i{M&tYSFzR3Dtdg*YHFL|*pOA<k zlF2`luP8_!cJ(HNx9u^5W;y_t^^6#ivh7mbquy+;Y(FbqFQL<4yrTUqLGl5T1ZI6F zO+OBtpbR(eIo~B6TCjazW~txBm#m~WO&5L9sJxDb^pu7?)wqNC->ZT@R@XG-QLc@t zRGFN5@4IAQ=KAFnI{Gj}Cnu!A;sTPmC?Dprdl&uAX$msf=m~bdkak?3e*XL!@z+U( z;B^k(@SKacdH|~^K|CTq~!JRPVB(eoLj|SFTr`AdSr$M zoFhU@f#0~s6o?)Tb>3uX|I1l_A?dkQS|gw}qqDN42}xP`qV&~TYhks^=4czj$h6#S z)N0yLco;o%T-LRaEI#m!^a=vW+8cbm72#DZoJW?Jl2@>j^Mh~MSDuk?UyJH~NyJxKTt8sx}jdzq;ty2+^5!;-M z3f!g+J(O>b8J}0WsKLHFo$YzO-RH%g9<{0C1()QtU`Jz%U^C5yDGzx5+`or^P4!LE z)LtaIAhKCjvx1+vP*pUUuxmNt;VQzjP}fX{Vf9f|!^mMZ?T1iGnP46W?N95xb2hwuR> zu!}{{%3Xt#6{y)M%H!+p^G?B!FCUCh+w=4JCylg@_bJH-8SA}5VFY>2mgKIXeO?<` zMWCDKQlyB~J^Gin)l9PBL%@JsKhPMce%}xpcLk{Et>Cx$7<5#0k|<-`Moo#`kcXaW z>}6aV)+0YRhDPF2;s{WXA0Ox4`liA8WLEw&R|}8}eM_k6wc$_IbofoWx2o_Ps*07W zzj85+YuO;yBfd6(a-0`K0z0 z^2yllO?}vexN1-N1Awlp7&JO5u2*^Elv=71V(9dVR;f@JFylN^HC+|`@}s-KDM`5I zHh`yn;+OcAJ%vJz%R0$c$)Fy9>;2eAm(L8^l|qXw%|yY^p4e3Ipu{0+;45{#OP*@u zYa*MN44YA7TlWYl<46MHGte9mx@c|*m;ieIc1eb$vsV0qzm)p^w1p*)O8E<|LT79X z(>*aN>rJA6D*L<`MUr7#@i3TDfUqY)Zr!uAB zIL7&9Q~z_C44&&%g_!Z${G0Z8Y9iTN4Q(=QhwtO`pOtDfs>>I}_mz%93#zI%bS{4`Pz$sI2X|(F;RRM2!V0iWAwVUdD|Y;MPwrSU#M!H zCw~UT7a4)j3`pE=VVhVgo4D2w58uOi^G^e%cGtJJeOpOt!YK@G8K)khMFB1aw==bD zF`O+0#x_lny5YWbiGwW(>PXz$@dsCHV-}!El1rMW!a;Cy$I;thvq!qkdxH0G;|ME= zWM97~u_z|Xw_ttmhfA#=IQE!Xjc|z9{Lku#sZUPJww_C;gpu@pEmuj1VDx_30^m=u zC8go#k0Iuo-#hxNh=L~Djxp4B=!~=;A^YQi38q`DlsLl7GLH-A4^VCVpyRZi4XGUJ zkyQ%O-hx%jaJC%j#!|n{DAH%;>!Qg_ZDfEwp#8tb=M3jE>)NQIJZx*=qf;s1-!-4$ z*QZ?<__#NBT7J zHR!5yByPB@3LTZ=84`{7@Tf%^Fj&|gk9UY+GPW8rc=$Z{TX?&Us7v4_xW_h_wnPv< z=8KR_)9EyED<#CssKVkf^GNQS)7td_YQhDRXC713OzinFKMr>^k18y03AU6yCOK!s zW`R}ePe?hDR>`nEv^3M>x6Dd3;cD?6=xeyRjK6P@m2JGg%V3;}t>)N|%4~+b`P|-o zPTBuNGSf+JC(i>3@nPSP|Qy~M8>PSg_E)gKw`=+Nq@#bUJsJ+H#vR4e} zCRGL>8!q7YG*@|fy-+_IO8Z5#KU*uFz3dQ4`uNn;b!WIw&t_jPfH*{%4aIG-(>_~9_AEVY1<9xZt~m{F~C1FCR*zP1|$Z9!jF zqYIC&%mj~tE*_Vf*V@CKcAZvVMa;c{f3H_=oa!V2pClJA1>_f3zT|xO0)uq6q3h}S zstEfJI>ogW_t4#eN7cz@>`5ijmv0~rZe5&)WJ5C*#LpOB&I<%W{c~_{TA!p`>G_V> zCTfekDCWqpA#x0mIdBdzy*g~FZ*^s>mA7eCn``l}hz+_R9vl0YWB)?$O@oJ|`LA<8 zF}iQSN^ju5TeePjfF0I`$%xr)4hAL=Z)jXx5`00Pgw^KZ#{Zk1dmyezCGII@+0Q9` zChyR>7QxzkEA5bNQVqN>0p^*y_LjYTn~@=up2nWr*J}R}1vv5Rj>SVS)RM3_2rG4G zHSm52560ZOd#5q?ULdUM2CcDv%aHMO;)SJ$m4-h7umuGb4RBy9plk(M^n8G56TfHU zH{02y0iHT%vzQ0|ce!r4|3F;<*H>`KPO03G!bSwUZ27?BuZJ+qn z*429J60k&yiC@~gW17=Nj*-`tL|x0GA!6`Je<%=-!FIq)Gsw~ZTHoej(C`BCQR?Z6 zw#=pFDKDiXLvR0?jQ#m%VLI*ydpb(~7r|1jlF+pY@VlepPqP6$ZN%oUl2&+2<7YZx zADotlfrv*@{TGsw8)JB9>Howl-J0T-%{WL^cxCASnu>`uZzW-Sz*~Rc>m5z&t+b?> zfk&O=pf(2DPoH&$CAY3^LjIk~DHh7xrg}Yg$|PAG!y-o!z^>CtFmb?hKer#8YKH-x zk_|0y4ovQyk%8C@WKCXzJqX?NpZn+~GKkBH?@8R@4#!Hf#m>*s>#4lvZLkuIRxg(G z)c}``P`5WAGL7($c&If1_giYvWy$@P-h=3MUcfQh92qL9OY?!Bmfyb1ZsU3gbGydH zP++L=M%oxAu<~R?ldwT40!PKLSZ<9_9cl=0an2n` zx7eM|&eIs@q6d+8G|I?E1|*pm-iUm1s##XGxH=oSSt8qdPKh)7dR69w@r`xQI!+Sx zIDh-!+RuVm#WLUw5`D~IOy|7-ZI6g+=6-uGv;STz>TcC=MZ|kjsP`%m8K^pL`BV<@ zAP>Y#&TEfsP}_#!!QiXDJ1Gaphqd&x(&-q&;3~SZAWF6(H;n@qb6!8PUBCAnul&oE zoY54Xf9?Xan=rM{$FT=EkL+3Un|$eeYOc+IT2{kTFu-144-Bx2_f9AG+2XNh%`DW} zg#)krLLlJt6aNQflQYC6ek zF@x3g*@v)xt^U=v+izBUcQ}g|&tP{WnOC`tUM}-T7|-Fk#nzUJW&ygnqxa4cUbaeC z12VLAwO$js(oKI36EHD9In$CVOCyETfSmi{`wWf7=&P~UJA}tX--ocKO*2V2Pe}NukzIv`I^DxH@qP|V??*?# zw~f#`*`S-1g@}7*14!+|wriD6++i4`xSk_dvn|8t{a#J^lYiE7zIHwIn0<2$3xF$F zuaHS{+a6;$&^Z)LikXY)T%OGS_>bz^wl@@v9XjRE*K$$+5?YBp^-GJa=` zwKH(QQ*CA~JT&s@#|Hf(_cMvRW%!mqVD~DEndM2CIpXfE+(#4E47*F3WH1V^Anj z0$5_R@~QoI`9Gjf`*syIU@zKCk6(jCH!QV<)W`CCj7trswXL_i3f*`nt#zHRHESK; zlF-dyhu;G<@sZa_Nv03ml2UuFH->H1%WBzHk>eUy4!$xu5d8XYDB&A~Xy& zU#w-W<5~$TeT8P79;?q?d?~us7GHg`o8SiBEW@iToSGOVjs~_cQgPY0-aqj zFc~TZ;Oe#G_do8{D=xVs8?gy9O4lNz;QgoOq3ZmgFIxafG#K~MbT^XXBWLWzxiwR0 zQ81rhLvp%A%t$&$s7`7zO3id?$NFL9@S19=W(~L;+!$L;RvfmeG1E2G>sIU!WaVk})fN4Uh2^+>JWoY^J8no7j^%&bDhj1(l8M#j8 zt`_<7bRjPTHHA%iiT}ax=~?_$52F4!`PR_tDcLUPovf1MH((sY&y}&0g zw|r_iQ6s+nk6pADZ*Rb4iOgQien&izHvWIqw;pcP3s~(G-lgq!nDgI($U@D_vPkGn zmdE7Z-`D$;2h+%zdTobM^{SsDAM;`y;~9Me`troEA3jJaYi%VZET|{aC35BJ808zW zA#uCunFxIueA$aZTZQ$wQ2xTMuUQ{WBcoH?tTXHO(hJHLgu)K{Eu#%%Bxdqm07=A& zaQv25ZzJ6PKnFGF;h0v=5#UkYaOe(hd(8BWVEr%lUO)AYC~t1V=Gx?^fW2q-Jh^F+ zGEp7+N~z7=Oy%0O80e-~?B8ht@JPrz#nmDedAhYHa5 zgrP8q(Oo%0D@q?#%63I~_fX+7dKu{WDSq}-17-eN0Yk%`Pxd7^YiGAS=3qFiF zZ^ECqmFuLeq!|9}-;f%2GQ*Tw!8b-KPrTaor%vx|OWAMU*OzT)|I(Yc5;y_5En)oi zN}t#d%wf#Mm6qG(ZhOaqCw@UNblY={#orI$aVA-rmNZj|CU8&}K@%Y;qkP}7?XNRs zg+$>TAP^)>@v&9DAJ($N2p>Cir^Tq;TwRmqM9?5f+?n?99O}H_6_R>6Lxa2?ZV-UM zXB$jKBGmgP04uB4Z(xU+Hp4HL-tGbCN0H{bSpJ2V_&*jh(YW8g_j3HG+@9uo`}tfw zmb!>-Iu)uH7GiRHg-M%@qhUB>79TqAEh9Y=giJuI~ht z1M>|x+)Wn^Nt3xM?Ap&HxwLFxq#jU#%eI;*6{ibWqSL|20^F?Me7gg|H;h!pby6;B z%J0*lY*I0HxWaIx#HKgOJv%bgw%^f{s8=mHsE)PUnB59SsS_e9BKEq9AL8#rg1xS{ara<rd@491x@mXb`8lBwRI+x&hxQ1r3TbaGW0_htXu zIh|k#p6{!FzHR7=D`EAvr3!eZriXKFB>H6Lk5`dMgXn>gzlcs-h<=>Uq=1|Xp;)7a zVVpGM4(z-yE728&a2*Vz3w6VDRQa>^arJqTdl)Ifmdu$Yw@6SZ^#D$Nbc9{lO=A!- zB*RO?QAV4YUmH12FC(^1TZz!xY_#e@YU+}!lf7nU)Sq0g6E#DAxJHOVY>{l1Hmvdw zQ=%gZlZg6dj4r&m7R+M8dF)o6m(CT`$BbaO)|M{n;^0Qx${Bje)*dJrY_!ZeWFFev z^TV~o-54~Lt`@aq-&r#d_nY95IA4u$kUm|J{v^}lg5HH+=P;u(q?u$|e2oINM0BE% zHG{SF`q9w?(|o=+Z&{`#O$hB59FB}0&JM2Wz0nExc6rE^`RZSgH`DCiHzgwWs5!uq z6@8R9;6joc-nst`4i>gAyq;^wgh9N9C*44fJVC!EF{D?tP8Vr`S}LJVxDpsj0(0Yq zi()e&Ua>*f4naq+zJqOFbL-;iSr{Rl;W?zBlUi7ibJi7K3IhHS-T2xz+oSujrtR`e zjH|0 z4w~?^nwHFC$4GxM5q_rutauPiI)eTd-y+QI@fo(+7L(4C*54PT`<#yi_0ChmJkUq5 z)eay)<17vJ%%eK><)dWps`J;BZ}WjomN+M6NH-ppiG7$7;ph5Lvi@QozN@kDMXil{ zL9M5=Lfwyzv$JhJ5(NTyer9pn*uWwXnLGB!p#sZ#65Xbq{ejLi0t6G=-SjM`SAW{2N zM%k@A@Vl0kBJBWPf#x8wEw~P1DjqnnM+i(cV+z!(SmB z&thJ3;}Ad^<#PTN-(qb1F|ul*s9nBV)p1GP;&z~D3`Peqsb&Sr%>Bk23VMJ!&)x?_ zRED}QerxG}OvuX$ObF^o+$h#7cBor!~ z6=KmdA5u7jjRm%Dl+?{lPH^`Lncen7xYcYH)@(yqd6FZ~r0tqD7%2NPF0^&O3~$a+ zdcA9heFSU86cpu*8cfjh1SmD!Y&n$e7<0Xnt+2xc1R0eB-J;yM_$$-Iv)sfsm3xF~ zdmdrivx2?SHdBkOgvp0Lt7Qyg(i(+%YS$V8sx!7r3#62z)h5IDi^q-<=iUwLp`gj1 z&rNmnO?%$rX606|8*t{{H(0eB7XV?~07E=yEz$Uk6b;V$!cYjHr9>3L|@*m2PYp8QpagW~L(~x@SLXie~Q@JaVcTz`N z2|G0S*AhHT)ArmKCF5P&>pM4n*@anqjAR2-RCT|jBO7|HsoiY(s8l)1Q1t97fFOg{ zT)<~agloKp)OHzOZ3dgZ5`W_E3S=~MnHd=7j^M3FySsz#4s(t(z-_4`^3!2It#gl} zf$UDK^+EDu?A2ScV?r?xNg6Sartxf0v*&c{@=r67+-(s$4M%>uVc-pJKclQMATw6p zA`V;cwv;d=;(>lcRcr@ja3VTu0J3Uah(H5wF2*k{W=tywH1ILmm%e;^0=yT-q=*y8;IXU7n^xiaVM1)f;|0vJDjWh zb|(L}U|i%C4M8Ou7(q{$6o$T839G_XH!)inh;RxTE*-Yz`9)x{)ZPg5Yem)=y;6`p z@8tg${fTI(rgL>+(H8>^`>O{(_s11wA#Xu_TCd#HTRQisyYSroQ@zMAwvQ9s#lZhw zfxe8YNWFhG!5BJnr^ik#hUUXUn_r(!Fu0?(!XEtg)r5{Sr8NCeckK!gFB=ASY^2-y zDqC+aofCXKfTO~c0kjjz1O{^S_*B{XNmo|fAJb4(oU{FUi`K+x#A(e1;CxoI<4krZ z*aPALF<6yl2C9KApF?KJA>A`e=wQaf0shxFF$XuD^o+ifbdW2}zoYv$=kT)-aqr3J z+}D$Qk}w;Jz%lMtPo2~kX}{afWwIi-BXv|TiGC>Isc~0%$7}>|r?zOqmCPG#tjD}; z(6NSuQHP|W>>CrD#PTiP8S<%TVpRSmw|2A+zpAS*FBkm1{z^9$cE9T^ybQOx$hgTyq*0c1{8J&wGg%>WCEWCySJ}1lX;~1lKQ-?+q_FgfJ|;Zi|Fu+0O9S5qV2s~( z*vHpikJ_?EG@I&qf*aw#kBOdt=zRPit(?*MnQt!NK5G~UFX-qhbH>>XNG6F(CqqFl ziTm&IaoMl7eBmR4bowOh(uO=Pyo_sw?fRnf@Qbve<{yJql5P&BLcqH~sQ41!U z?0jYYN4_E2?7X~dSUkb!4Up{j2_st90%TC--bum=#w%iRxm>@x$5*s!T-+Wb||skUTRSf zk`ehYxNCBrUR|<2{!Ie~J&hE0H&xt<4Cd^Vn{t_gmwr#(w4r{KdR`<5^rY>2dX-tm zV3vRAWnlQn-E`)cKi_nc`$?a*bw|9ueP{rF@ITd+qAq^y9@YwDkVHcJe|xm6$#<~h z>(|Uk6miM_Z2|=#&pWCwOZr!1r9c1Iqnj##dEa#V5mf)D!xLN*j(^K%4r0xtc8UhM znZA7PM~~?X;{SgO*Dt>1OyaQ;A-B7)E%4dqsUUt!t7m$3;*C3%$PAu!I)>()@_2wU zVNJhBar>W{r}cai=1z{Z-H0q+!ob;xF)Tz#I^JoaAIinLF>?@4r1na&6vAWfjClp- zUTtu%E&dTt!e*0XB(0KVnCH(!IAcK%-#BoQ?pdxqvL^0U>{AHlA!d*6v3N+fYh1LQ zj8wZw(D!6D9jP|K&|3mpSF8oi_jP2>ANhu}eJ>%3aHmwXi{fAYfa*HPW>vGnRQ!{2 z$KC)#!}o0i)^d$0289NPPye1!m86q@yegK@0*})@enZ@7b79Y;$X(Q-p?Xw?RJ?b= zg89Z0sb-rEcAkd&l#B(^v9-rIq>c)~hb6qG_U5a{a+i*e;YWA5jB4M!lF1HPm=_+t ze3I6(lWD<()5&hbBLA(PtopEI?0avFVU2JrKn97AS^{WWcjCmPa@o1t`*|5Sn<-)J z?UZQ26s?*8jf|RAj%BJ9gd_rD{9{1tv$s4&P=?%mRY3#PohkLAfrxvepAp;g%?`%I z_tl0^$+tt&`odc^=lxL~zc*P?%%zi=YX1oT&l7a^>+blBwn3T)C8pTZO8@Ko0STv# zq}3Q%m=bZuO%&#owiB(JQl40Ia>;#@f3Z`!KP6rDg)C|Zvmdy(OFJw)b4B2QD0ra( z88!5k%f2D7Mq@op&MZa(z?iF%oWfMe$z>)&Ie=a5!AA7mAN%biAk=1{k5u;0OSvmB9gH`rw1LTgNALrO}4i2!~*c-VV=Xm}Z-1mV^tD6@RGHzQ?KCLfqQdM)+-wNdY zm2|ob98XzZ_;NV)_oOAawZTB}%G8Uv?N1wv7fu~daPcA#Fk;tN?DN9rFgrQwD{6`7 zxo--bkF9{=YaDFrqnD8q)-v%cS?}CnrE~)2?idv1x0JcL7l#G?VRG^hhXqm$N!S*( z3Y-nZ@s_c1Fsh&&D|3Ly@RXRu#kZ^EvHL0;e6@_LZ;YJX$fS^?9X2?nX9=6bIABKC z=+j6BNjhhXrJtJ9XCf}uKIiW(y5U;^{V$bJH8>W(NupLPQkT*wJln=}NLY)l1YXoh zFztiLWEFSLcGC{!&-@u-U|j?f-FU;HmiW>jljYiadQ@a3?eui;`wwFtp-R8U6?S!` znkJ#cUvgY=Fgo5xC}Pz2u1nIi7roVl9LC#N!36K*H1xbdo}NE>8XFq98wG`Q$;?K8 zAe;Uh>C{pffVaZZcK?~}@r%3#yOG}iKB)BYEoqBXr`b*1;<69f6Sw69t{H-3Px9r1 zzhTim5|hNb8aIvp@QAvst6?n|8y7D?+v5Jv#&>ce#V+p{;uUzP8(%x`IWjv`BV`h1 zV&5`PJx&IPtW3MngY{P)u+#8|-Dr-ZR^!mS8oK2pcG`$Nji3q_z^JW|?*poxfst`& zZ?F8@5mC)VC-q%V9dWjt3l4Kb%Zpw)A9}xGmbnK%;0mIa-fjFs2Yq#-8>EH4SWGE6 zxkL7hZ&H9a9Fe0(=N?C(uW)tGP<-LAvx&sN%_T237E9e+pPNYXaz5K<&GeUZUc{L# zc7TYSwL$yTnT7+eS)3595e~Tn*B7^nx~pz92>XB2o>qGzTV9#97cQ5rtei@87vhuDSlh`sFk;!s+I+ve1GcbsPUk(_(uM z*!*>Ov^<>8cW*KQM~f0|seQV^cS6@FAFw~Q9u3w>FBrEBiZuNA#>A9HFe7Hd#il_Y zk~r}y^=8?h1;5oc{{ExsXqk2MgVxK+51_*fy)a_&A!xGVDX?Lcr+kv;<3R0SQE0s4 z)!S4=q!dqfK_Zdr%ws6E+$>cpchIi)YjrJayW|WG1c`X{OQN|8_h&sgVZgM~)sIj9 zL@LZNZ+w1gY=py{R_e~vhJQ}`ul4+LlAZQX26dlxC6F+x2FpjA3T>D z+*dJ@43KS;`j*4Hc>5ik8;9KG5PsnNebqpwT+B^LULA8je!>u}vj5}zEA-2*P~b{$ zGnC`TIY^Ib1>FK{v{R1Y@(>pg4gLNha{9AWUpww5^Xw?%T_#_gf?oS#;caY0z2e zxjW+R`-u2j+CPD1or>am^+jb>o6&e!-yOrjarX;tVBU#nvaP)Co1jGW)+D;{usc)b zR`u`BSh4bht~J@7g23IH@asH$`ncARLz@XH zw0@>cB;e5s={b{!rHc!|VI~xEzS4Yu^2)5O^$-WL*+AMkGhVahF}-^L zy*n5%St+@;m}`=CNzGhrTB)-~H_$?wZ;}-9P&d-(YZIuntm9i3f^c}379WtaNNr+o8itG4HCz{wd;N}l z4T(>3+wqq@I*i$wL{ZN^A}^XnENvLejgaM=mDmfNnF{eI{~uFt84%^;M2*rVuqqxyVQY|Z6`rc!j{DoR1 zA&avnpmI};Uq<>>)P|b}x;$4Nqv$DSrEj8#l^MKQW+s7r^KV+|u%2i?;D=7nu<)bq z=Idw-igi)`egpr8DAJfICXKYCMUX0po|~xbqhQ!|^=eZ9)Dd&SS4J9yG(o#xb*lmJ zT;B(Qb8$f@ty6icHZYC#aa@c)p%fT;Ju<1APT9jIh`%hqcpnb~uFJi2Ta5M+WJG+P zDS!CQSEcA;=S%1LI^4z4gYK%|q9vQzB}Dfq|0wgN>Oy#y#)QH(B%tQ4QN9ZmAE+Xs z-qtkE+dbZzaxcw)%q_2Yp?~n8_Vi|8%wE^m%+i!_N(=1+d8+G%i_@hfPT}R56LO8c z@Mo9JBF|n7=U_I8H+ZaVICyIyc-C;Esu>i2&TQr_s3Y1N{>FsNryxSjiZ64>QY_i) zZSd1Ww=dcI`8IDAX&bt2VkE@*1FB4!vE(x*(;uq7WuYobJM0+geH-0)&?YsDybkJv zN924~bO;BHTP=iFS#b4&CL0#}L%(v^GaRyr*Rqc`MS$kq!l+gAsmEj3$HKtN0Jot) z;B3<)2&ejt*;QWz|2kvB9o;cSVt{L36H&=t# zIpx8xQ`44^zMAo#okC&wHX^XN!eo@%W`3pw`7f?+scUFB3JaX$arQ?esfrvPq+f_cfwl|rmwe~GfdP}%0=OAgBj%&fYe*^#ckT3s|5-H5keaNLB zCrrKX@XMm8qQs&s3<$jl^ft@1@?WQVf&T~Vfj9Q>p?(WTU@nr{tNjDdqu%f|o|!|2 zi-+=8zmQcoJSLhFz6=dU8d)5AT>;~|SZ%XRh+(Lh8}!{efp)E>c0skAc8!FIFkZ7O z5jl@pH?x8C(R44&LAdO=L&F2UGg=D(4fuBKvn58>u#W~JUJnGc3wtL2*tooh9M~Zr zJZV64cS5xQeQAt)u^#lxm*p4ERN@2^h^lRsX#^@3_}>!{NTCaD6HxK2vB`wSvYM;) zXfgp>bTGWnuM#g6Uavk_Qyzl-n||SZUmnO98pKAzr!~sNE`9}mZT`hLf(-$5w7R)b`xSS zl9rV+P$r|!w^mEgauH$p{_t0f>g5%Q*JI|Z8sH;RI3ME37&MWHFS()}>I*h zGSvLmqV_Fxzc6~~n`(O0bL9lQf+3Sh*3b)!pGgXv$@PORgBs|fo5BJrV>oM9#B9d; zLriwF_h~nf%ltj^T>A|U@m49$N`L^`yr)8xyv5VC@kL&jzs4(?Zm@7W&*~F3e)IZ7Q*RAB|c-I z3lm5b@Lw=oLmGMjdmE^Cd8U3^T*y97w!UlPA@2+FhVXh6-3Zn0WvppN0Z$04jbgpr>GsCP=krXaoGQx4~(A&*U2z+_w)oN?7gl#Y^lae(V2ZRWJMoJ ziM1p&bN4P=^@px(>3LzKkJxT5aBHS1ShZZ*R>=waWJghlo?j5zu_b7EHTsf3XIlT2 zWHK+F0rd=DG{Hh7Tl(7~m#7+iET<3=hGw=%5#iXP{6JSjwU&&%CxAcwftU2=lmjee z$%SJcvc}~P7e<)q_jZ2M>#G%&n#X;&YXb)s*0<~o0giZUm1x#a4X7~H{8Zw;84ZBq zJ3_L??Uc*)E~hbD>OD1A+Rk!(osJ+k$33{GW=D-nDkTXoMUGA){#2VNHT$yGe_>U` z-{jkJr+0k8M2V$j-^Nsb?d-so#`^8fQpg&s*$`dlFQx3>fKYTYQmbAvVL!4#`tmEd zDFiTmVq;F(Nn>m=ll#nU=X*eAl8)6FQlt;g$Y zgNL&-)8Ud_zjD+K%t`-av4aovHaagGDEXJ0$hA`GkaT{=B2Ndm|B(*k=YFRCCfO01 zRF}pn+1y`ELTJ2CZRgw!Q305SN(bX)=K2|A9~HB&_c_jc5tq1Ji+eFEWQ z2icz&a!dW@>|L#6+HMy+Ql9eq8B)0R;TLiOXwyXm<)S^zsK$Xbzvy zQt|$_jh5p6DhisE!m;O|_iSZu)s+;JsafKa)q9wVW+Yq^Tjp&nON$&5N$6-!u^m}J zOICYBiTzo*_f0A&g5D{R=$hxaL|G-(7@wppjwfBDc|H}nG2+>({BqV}m`28-dJt~pHlvvcBzfZ|eJMk=^t8LD%fV_RL zB7FBIaZeAfq!Ny#Znc<29`Wi@UxtR<==`-u_h+{F8Oyq;5cvB2uoRIQ{idkW$Ff2# zfE;%x2iqk)m5dQ?)r{)x-nHF|3fF{Aou%+InIK5qadobwrP zg=3oJxaa13Gn*?G)QFGG1l?G!$X%k)=Jn*@$=!|XO=j0k%iZO)=BAh5?xh9L8pl%X z48P;mQUS{hOLtL@8uLOf_A}(q1_=_5=PxU=?YdFHAQT8Gom>mQaMpJ#x?%oDL=lk_ zL{Xk*fYveZXPpPzt;PJmI6Yo_6nUc)H=DTqd-1-Kg%da+3hL&qe|2DAcA_K{K<+eC zBlRa$+6UQq|FWtheUJZ*NEs4dsY|lz(Ta zbMsD#^u=dFmS3DidVlZ=6Y5>U0@(6SCs?ud;l!unXy^K)m1ytk1^Ei=NZy30jX7x~ zeETJ`Rf#3cZ=Qi=#*%1YIkJGE^!klh;1ug0f$I6;`t!cAUK0v zw7*5D@EU^mz@G%x6fL?V$+$P0a_@)_^~I2Zs_`dZC`wqCgr8sMUqtyG0OHAa5K*6S6`Ue z$$u<7c6ZMpTb;74 zsS?|~+4J2`Tj+w$YS5vb59qcyAp~<9m!g$t@ZPX=^eVNH3uxH!J#2z>yw`WmM$121 z<>;@S*}a&H(BKyzVTsnq9EtWvrNiYG?k0dElq0Kb=3W!mzscNo`9=l$cMVY6r=%*j+ndpV#6*&NVhpSJ zIhE9tdEv!(FqGW*rH@y0;cc+v z<8gk#TwkE%-U=;oW4;*3CQE%^zNX_2`SifR*LUMU!bbRw9hv;vrp2^hg}?O372>u? zh%79@lZ!U#AiEp`x%>_8klV>mF!w|LAcn!fQSBS-uGuJ&BgR^URQYg}=dcjURCHkQ zW*Ub=6V+ewcsk5C5KLFl;pclcK^`?bz}KD+yi`{(MRqx~UtEy1PxytwsoyB<^hf8e z^IE1kD!@)TA~>ge;YLqQLZHm~4(G|5tFYJ(I2111n8yvd%AbU8lpl?^ml!j>)DFr} z5SIh~7G7a+&*TGqP9M<`HKA3Nh=i}>0xUhmQ?SJb-+mdS7x{b?y z>3J_*hk#u7g{wJc59QAnDwsaxe0~q|UpQ}TeObD8=+%oKGQ>*G=Md)NBU~Y*)IG{YJE&wz)_!nWNZ(K zjGNl7dvYFqJDN6*_(HQN{d4fR&gryzZuM19-DwjH8T=m#IQE?>fhg5tYT-*3F& zLN%@*&z&mGR?)Q*0mJT_!wuyq{F-pZwaAgu4!ecC;y;t^^y^<;pM*SAS3QXLCL=X6`8q zxzXn%YGKr>f*M52=J39`ufxhw&%Ueayy+JOZ7Fu;1_GhEsl$$r0t;b;lXwVAmuHZ= z(>CEt(Um;k3}fA?w5p*>SC9c`b$Mui!KyJsj}-(@633j2NRdc01uyoyjI^;{gkLy= zBC=Aefax}9NFX6mpF4g>@9@x{&hx61)8_=YE>$AI_KSZ1Z?Zw|)G0%yi1xhKJq`St z+fQDZV2*E$9nAl<$_h8+cyrEeWOmq=Wk_5&*D~ppNRdX(nrl38M?PvyFNU~xg1kS#)*-=%9P&ke7fKJulaD432+c=8 zoxd;3i7gkd&+Bd9oFP`fbm}~Npb{wNr+-W^(_vq((hI5J5x>$Mlb6c7!+-0PJV2i- zN*-&GcKWD!VyemqVR{NMuXM58#=AY2t(hdiXjrzl19NJt(uIDBtjE%eT z>NKp0o)mt}c2WK;jq{pcep)4TO#3psB>g0oxmORhfj7MCH0+NAI2{&=e{By zHcIhomUzc7i%LmC%8cqC2dj)$2!1!V3Q7GvHlo1Vi%_*KTV48;Yq}LOQ_&z>IMkp$ z9b#8=zIZ%sy%N=^K40tM;NJ$Yx9}h&%Dme?REf1ZoQCZmK4FZmP%ubS`PNMZK-RhhOdV26#5GQ`}Kd&dlePPWjp-h$WemU zUV0hi^&cXv`G-sY<8J@``NGys<&dq5RRC%GxqHkNlV02DB6dA6x1*gE`UC#etXB9#5xh;FBP$=@-H{nTt;(22Bv+7t8 z+d@2qovHDIBIy=BXms*BE zWj)g2W_syl%DGTRL1Sv(7)+j7tM@vaeVk7=l`zqhA7C~vc6lQi^Z}a?ScyON!u!^Q zPK;PvB)Cs{ZVufq&5g=E<(H7qTx|r%>Tf;3ujLwE@9|^bS1#ZHS3LPa-2l;9e>}bS zH{r=GR;lhFiS!y3v)#~y_h8voRYG$G_)@M?9Nc<<_q^h+TR8vbKD zi@CJpS13V{v!o%su`Qx)AL!Ju&E}fh_K^q27!5?ab_T|s3sgV(uD_md9f3>zywHcD zq>Ot1VCZhslKm#Iw!r(Vh4(RfC}1s%mxmk^hmhPU`Iyv)5t-|e7K)@kKBWKtEt23p zS9S>p(>FT`bw$4Pm{0}ua)g_M*NgHu{NXHGpj2fvX(Dv%XbdK6>_5k;4MufDL$Gsq zHc$mT;?F`^$nQ6Q#Zq4&-~$2Hwj4f%2GRr)G1nd*EQLx*tYexqtf|DOq^VN(Jf>l= z4S?ywa*S%~l~rN2v7o}B{#S_v`<(9@kLBvYGqp>Tp=rjm_txHfk?*{!yoR-T1OVt>2lRVaO^= zFX4@Wg;uIsw_rITFgF{NW*k!-Jlo|dS_kwp->&6+Dh~+ z&R~^=Zw_udP9y(TxNeoGctHI(ttl437(w30-0#lNv1P zP(m0QY}Hq*K~h!5ydJIn)_I9o)tcmq9|NjITvS#1aqG(Om68Ev6rCf9C^c}XnN~Gx zppI;0bMgW6X6@3VrO6)`W`VCM6@PqAqFm2y$voill-r7X%u4TM^h&?A_zU?a-6?^~ z%Yd9GmOhhpA=HUmrpeAEt0}~PJ27087Oxw?XmmvFQcqyNP<&&f9`Ff|E*%Kvzo(|x ze-|e8N^U5)eA_gr__*XW_h5X3qEP1XO0P0UIDYj?>((!JyBu}0CAF(U&G(cV=Se*u zo#;xc&n(^25Dl`r^>7BIIF@U0^`h%XR`Ff6upcM! zueEQNqvbk^@75(S_6GlTW5zY!!Uag4CFpkuRo z`HoK=V*%G%nZx!Vg-|8#1C}sq39I`;-{&79;KaN==ucK=(Y>+eFS=dyz}R!lN+Qgd z%cmNtKMm0st+B6HsqnP8zUvyFs)J*A?)%relns<}G7+~0+YEq0Cq|!1 zwH5I%9Du7sXx{>j_fLP6jEOD1WHhPQZ^c-+&wu=c0&Y6|(~lK7S*F&f8v)hVvEt^D zlIRiS)Hb1T$=pD1opKdD4TKHxfTsKeFiK$(SwcqEe>36()*8}OGe)ZSy!l~(?n|vD z;-im14pXfAPIEL?x;Su%Rd)_XQP8P#(KI>6b`Jf9fk^B!F?%eu4sb_zEmRj~V{_a` zkW>-RXAR%qXoveO*Z7*GpvX6j)Wfj-ve-UyKelml9Qw|w8x~z9cJZ&T)v581Cyzfr z*ryyi8RgpVEEfDP|9p)N2pzN`M#ZRgm;+rdyETf zuv*a16c+fJbgH~)Y9*I@L}EJ!E{UErwHU4 zZXr3Lm2|WvcmMs1ok@|r;m6PTsW<^Tq>uf1-{}K(MCCIy+p05HtK!4Z60Y7;E+1q{ zyj+d3)rFSWlB9%DkZvz>pm*J!^V$~eJI=3|I19ghc2=9-TuJL8N%te-l~=R?#tZo( z34lS^R$~Nv0F+*^QL-=KtZlKLV3w-MfbAt8}fgcq+L~1>Hiiaf1o)Hhe%Rg!slF?ZhKl^*z zATb}Qb#v6aEOf;W6cBa@pYhCW)D)MtsE_^(3Z1NeJ289|%9{$Cm+D_FadZ@dgRK@U z)tz%rI~>v^j8h=?i31gfr}-D zNzTLlJ|8Ols$-cETREwalkqnH?wJD6A^7lH54ltD#Je7{^{O@8Nx!SM)uD0!2iKdu zt_QoD14sXgb@NI8w0_6Iw@B4 zR$9tKf^*5_Yr65QdQPV+p#mqr6tGPKd<@ZqL!iP)hGu*(o)|0tq(NHg7t}Zjf3NX& zaBp{;z}g@%6iigplbPd|+IM^N5FQWQszK6mx)!ST|Ad~3#L z_Z9Ua2IN+O)&P24b7D~_n=(|Z*!>mqLWx%0aj5A~D&=VT3mb6dZ&ZL%f)%rK$`F=| zpQGufO%_x{ETzSx#_nJN|f z4dJj$W@Tx9-X=ESmlT>9>Q}?DSW`nutoyF%#G>TM-bZmi03;a0^`0`*<#IB4)sgM4 z&iT~&Jr1&&y>;qb)U4aRP?h+;26Q>S9C~jMOUm_o)(c*6J|LWm!rH^X5LI3Wep3bh z+`Ej!PE_EsarJ$%tylY%(~&iW8r*Lxf~&+%t{Nsu#|Pvu0bV}O?oNRBL*>k|iaw}i z{ttRUF6;VqHdn{x)}lSs3DR=*YykgU#8<})`<`OlgtOk2SBoL#CPJN1dWBPY?QK|) zak+J^!L~43GX$}%B!xVM&KTYD4u6RVr=k@R7%Ht9%seFgkXOEHjgL%)w6X}hqN zQ>7U+pi!dh?(HxPh|OQ(`GIm)X^xKqn7NK?hF$qUevW2YbkcB_B$#J{I zux;OQU8-kS)Z@PPay<>N(M%jOrGyR;dLltEueTmt4muw1?`@d=&Pz#1RX|xkhjb*v zdoxb^1aD3#QehPkrUt%Aur@fII3$zeX>MF9AaeeKkspDDaRYdTKPfl!2m52UN>01;~MI1r!Nu?=)&yzK|NOMrbx>=F?(avpgXigM_C znX50f;E?S`?-;eEYuWLIDD3wN*b@7^U57?k@knyMnAieK_d8{xmQ7DWm%;P)B<=L! z!oq>mK0qh?s`qgqBlfM#(obDu_RqtdhNSOrC0Qt2X$MVv`}l_F&jeyx-~r__@2+p( zOLK>Vi|lD-*nf&L;)c{EjX(Wag~?A)Q&_~iHp9B8QJ;(aBN8B_zS|&Q{gZZ^TQw`v z!D8^E2v_}3ZnUfMeM`*;4NT!qC*$mFz7qcvp zY$I^D2jktkZl)-vvKU4K+95`-SF2ynEsn#V&-s^mb5^JkF~5^kToKWw)9+*KYaq4l zocPq>b^UbpC!+X4xMx!fUI^vBTC=7qygN2gELJJo84yI3x!2($p0CcP3CF#|Pfvf> z-tFW*h~FI5JysOg+Wl6O2s|y7Cydzxbb{6YH1LOJ8n+cxyJ7A&sEN; z5ta;~mXr~VnFv4a+ff}{dmV?ct}D&?ES8Eb{j`h7{xvM_@D?qQk6CC|bHn5%%#B2_y2kS;5W0jUkvK@vm~nl9|loxgoC%Kq}Op~y;>))?)p#W zgwpQZE@<4&iXVPRZ*nbHf74iUz1C`59BABpkw=N^-tFlot&lektwya0Uy$0cXy) zN>i3?gu^=DWpQrr0X>q(rS#wq2mW)n8!v7S}x?oI?`UI^)i}yC*lW$2--Vy~kDmgsxkZaq;m)`mV_L6t)V6BXa$@Onpy6 z+r3WSM5FIZ0EmeC@8+by z!U;W=v|6%aEI|)YX^k7!;Q5tTZn)bA;c3`J$TF3?M${fi-5Hf|QisGgp^_mm%K9&?1f{A7pJO?Rk@ zhdvd>mQ3CoTP@CQ;`)%SgKq~U_qag3c=+(x{B{;-{Yj)qD0x}$>lHT%>J%8o`utbN z(s6_<%^z3qet~MM5X(;@NB1ZB?Ve7WIs41;xF?;|YqHKjWHa@I)bPh|XBzZPiJw_F zZeIX;Un}`UyfNyA&+(@;7Z6sR?FHj320zz{)X~T8VmOtf_*?~U*w>WnFJlpot_rQk zwJ}%|oVf1az`QpJO#~M<;7-y0xw|y4;Spa+zR7s`$riPIXHQNXEUwXXf2;43n`qtS z_QH4qtgDa(1+%p+*(Y2yc%Deizn6k&^{u`vr?+{6Ys^oHxm@J^yXLYf0&@l8HdFu4 z$o451Y(rK@(jj4}2Ag*uF*M=6?p^2lrDVx2nzf`5)8|PajTDc!-G6&$C(|{#D&%%> z1p~;<25QU^h z=0YAqeNT3*PZy4);>V?L^t#BLZg&m7G0_rKd;ryroF=a#P^*f{`q3z{MK%He3EK`a?;uE18^Rcin0-RRMm!8W)gZ3cSDpx|) zx*=2KPwAzi(VPvGDU}SjBzT1&4Za=3 zW9f0>J{u$3gUzTcA?>MUyk`WQR{1md<}Fdy4392GU(u_L+x1M@V6^erOqY#0FeO3h ze8auo9pA`hb&OAa%}IcNHf(U+9u}~cIIPchv7@u|C^onHdb@yvL}-!%%|^`$2Zx{U z`l6&xhQ>)ZjC3^yQ6~<+Y${(gTS%)UpDG$;1i(E+l3(L`!jV_G!=6WyDT;}h3*2u+ z6O>}Kh;icpSlR7ujY<)KU30Qip^{Sd(`YW4h zOZBsXbkkVao9MPs%qptRk0*TXAKV(sgon`E@+;IJhXksH*;V6UB+7)yn$*zkA4ibI>0q5nAV-Vu7I?Dl6Flxrps zmqW^J(anYuJF3z0DX{#y@d0&XX@r9_M2qqEWm^kic3MxGp-spav>sx?;6QU>F6v_tFlbp6EDYyFBG=_6N%6^5RwAt&e z-Xj2^p8*iJ9kwPJc_lpSmhkJdWzJ|nUxvc-Sf@uKe#l<#u*Mkn1XCaz7rvg-`mNu?QH|YB12#GLar1oi*tO}ROAfk=DnALNrOFRwHBA?ms8(k<4qqg#Y-pBP_ z+$nRVTUKd4Ig8y}X2RSjl8M0@55wxpC)RJB z`7v4QlR6G`eerd_o*9n-20+w%&Wqfs)>&Km)JbJa(UN-j^c5ffU#rclO9GLIXLbQ}6zZ!B0IIhViie%S$Gd z@s4Zzvn$zp!1Bbq;{WVaWb5jRB|&qAx=r9ubAqNJm z{nWVbYdx0Di?xB!of7kPpH*axFG75Evfb}?r{ol-DQ(Isc^#)ZN862GjABaxj$FRK zqgl=GYNUw0ntFWR{UDguS?$!AlA+K-H{|3s8|Wb5_{@gdqjK|J2T z_tfQmz!)AKzaR#qPV)kqQtV*}R}2#g2ynOG2O{;_r0OwebKi9J4YN*)M15ZT*8)su z%zwFBlOImsu;1Fcfqj-p^>P}4OXcP7Qz~JfV3!?Z?uJh7X2WM522}4mJM+6=N8^Cj z!Hc5%zOzR*i;j7ZhVXi2=-5ClNc)8gBS{O%_~!biR*u@ypwG0C3wQRAcJ`n^wI#qx zBzS4OSt5>u3GT_g$+U?qdfVeV6z34gzD|wpUaP*_D1yAmKynaR*7ygMEy+)GzaxyLccTB1MGt-g8dU9kiGV48bdd~2MG3KwI4z%kJq zeazDq_W9;Anb&1&B~!Ts-o>N1v_?iLI2e=!+tw06!=ATgzpTY@XpPon6W7&(Yj8`! zmR|&j6)If--K8`n>Nfu;0_$$8c? zpLF^2UYkRxj~#-q2rBki2pE-}xPSc!cLZ_Q>9P)o`cS3sC1=vhB*%Z1J3-ksxk!Fd zpv!J`KBKc_z5Nl8r&ri5Qf`G2^QOsC>x0#EyVf89O!te8-DWG+J-l_Nc(G^<_c)f& zdQ3{3){u!WqUl`NbVq^TrN6%RrC9C%&xg~gJb!WWAsU2W#BY5Fu9aN7HNR^Ncs7*1 zfY=_M9$Wr|YzN=+lSX-Pp!%!5UXmli@RZ^0htmz!=gd@C)2tb_6ax;i)=d}U=s;?z zxNx5)I14S*FL{t~t`+!;Pc}?}smr@I>AP5{Z*E?QiHerA;z#Zoyfs3!$zeR1LNsf9 zr$)4IO3F4q=Foie?(`?K2j%g)Tb%4E8PW-`EK-@mpvIXkE3XvgF$<&9Q9dgPs_74g z4h1yUaQpMCc(B3!!h^bfiBA~ElOF67u)iR&c8?||N%CWkY+gRn;B_D62lIV2!FeZ~ zfOu4w5dJ<~1?CWLnt+M3A5Kt_EmiJy$9$_UZgwvM(E_? z#3Zsb4D7~D4BkR%9WU>Aa>J@1sc@9iZ_k9;$?PUbm+Oe(yZz;2H<=CjM8a2_V!Y|$ zrlya{+nyP%B*ira?aDP1Cn%^Njf-6%mtFPy?^wREr&rr+GE*XlmO;3Jt(QEgKJsYF z)4we@-M^T^(_U|_OW&6~GD<&YK2}2UdAU*Y*`y=!d=m}_4XtW>*(n7|kA*$i18g_i zu1hTjIqiI9Z0dUpgsuX&PbJkUY_=;}@#jLsGXo89^^ zj*SPmgOzT>{w@(7C18MG3g-G8J*1d=P@! z!Wwpk{61r88Lp+J&MBl0`?EdNF0>ki)AUgV@9q)V_2?s+ zgV^%his(nnNfa5En?P9@Rv-qZ6Ge0HP??#jGBph0K3LtE__^T%NhmOc@>7h0az z#M7DtQbHR$iI-X}fH`KmGv44~4Kn8E*n)uIu2~3SY#MEWvzA7xBf$b}oe3z^ycA8G zQEQq?RN%t%+)qhl^UJBai8nVhWTBy_k&T9mlH8Fr_uCh)x#{K#xKI1>5Bn+pIU5+b z$?mc0c)E5^=oZ0vUsnJX!Fd#cH9AMcn{VCv`FD*=%{yP8-R-&U-!=Z23;bffqOQ>t zXu%N^NuIlkmq))gS*X~0x1k7xFnV4A;D9; z{z-;d)usZh$2K ztyRu2cVx}p!Y_1857|_;8Z`T`bey`3RT})W4vMWoy2|Km&mHv zsu~ny50ZW;ls23>hgz~p-|uL;uZ=b}gCU-5vEyeoy|T!6eK!Kf+2~$= zZ9%o}H=om0{Z0scBh@EWI@WskLz*Tq^ODTC6Ab{VaFY7E(W8CuWx$~#dWNO)HQr+;o=^<~b`K`<)0T%{~!M!Ru7e!fxp z23I}Tb!DXkMwTXRG$)ZY8^#ToGnG6`RVcIaz18_!lVlq=#37Q>aZ7G1k?MSbag}0m z?}2vYeAg+1b7P1T&*40WC<$BO=Kibu!|s5e>UVJqVTpOxw$ACKmK}K$w^6 zz~#-)8kMaIo_@g(X(_;o6~)x<^gr%M4#2#_uUF7{8K?2drnIzTXqyjzS&D8F6Nqef zQ+K1)>w`6=C#3!NWJk|;d{e~g9agj?Oly`qlh6I2o7Eajg$UTMY}EHdJfD5Y`uh?& zMh$GemCIRvaHsZEql?sLNF3z@v|*<5}@MARzUJI|0(_iHq3fS-F&^>azI*g$tp zkWZ_K0y&Xw+>3M4Ecsx`uN%8NZtW@l72+mT$d9em(1iyNiPP^7-(H&p4qS7YKBwpC z)Fg^sN=RM095+YqSkoZ+9mzj|_bfxclxhjTBS?>Zy0RJH|2)b3+bySy5aFP?x6!v7 zPUWE2r<;?So55Fpbg?O2JuL<)9CM+K1LX>te^!DZxM$&ab@rLQnfv^aQ1`R07bba~ zdR(lKR^w-*GPQ33!236X>RG%uG@;Pgh%A-M`2Mee(wku z35wLyI;r0muhwe^J0L$tQ(Y-Yl^QI?W9Ud~ISLK<26=*Gav-Wx@V5^YM~{y1+{fdt zc%#UH=N)N-jA`cfUr(HMR9?y*c2l0dSkJK7WDPV{B)uK~Gjn8ByLVsj=sTM#B`wfJ zgz`ED@-J7BK<0pj((_@U>MpX;v)3^9OoZ%YqU0sEk@nGh>GWkA;k=_eQ7Sewh$>9; zW@phFmMnBRx-I^Qag`6=F}g>tH^w>~wjM=qbNdTFbaL4Hx`FVVj~1|-VZxmivW_?B zgZ_^97i+D1C4lCRf5K_YuX%GaGpxDmR`YRS=7fHyKFD9ZWOXj^%6#BqqZld-k8Sns zRQlDK#%-fptU1}t!p7(neGa$}uOhEd>F2zDqPd}lXribY!aP5T~6r;r|i2OC0C{?$zuCVXIBGyWU zvI*|lXb;2DvgM@CEvzA(uP^3or$n&{5M^C8**G4oK0xx&Db(8Ax@Icev*87zMx0A3 zJv+D~zXuP8b{!lYVY9Wc=j7r*1{)mCjG4(6A44>Dj=uVfb^HpQ%tnN6vS3oOOtBviF|Ti|096K_hc*pv2CK@Z0S5f4;17rFa9Ke z3P9C;CL0>;#0u zWP+OA#B>mv;xnxO#;D!TSN_I6Sb*4VBI(9gcOosX?X*eMjr84( zX9GXZF*f>{I5rQCie;iEW-Od&LS&7(j}`Ns^8$-#+0Vj{iJt}8;FnXiQ8)A}bjGX; zb$Llv1}Zq{!+meQmByiQt^TE+OINGV`DDe6YsIy}lNixynhM3+90;1>K}*F6l$r4) zX44$?p3R4utB7D84e9-woB(fjEDGa2E&fx#5$)HUGAg<@P`@$iPkVhbt{SiQ;g&8oOtLiIgvRPV11N1_+ow9_m8^W1ug_#M8uV2*@=M5EJtMNK&J$e;0O z)tk{LG2MvL?pITWfkPbCPwd7g4_T8@!w#Lo+r0}XEywj$r7oG^2*~TynIMk$>3(kF z<2N4dc6JW$(PGWNje4IOYnUucDb5y+d!&J<1>I;=TWp{Z@f>iI`N=4`*+52n!%ps; zX6(RC)f;GJnA|UG6NCOr)n=72Z;ATx*O%__-`2qQa|_J^KdXD4DQrj5F%ECDdy+cJ zRa5x{zP)}f`{1Pr&wSJt=pB8T`Lsepj@Fs~hm$TRedVq&nfdqR$34sJU0Vl%)-yjp z6T#N89oKHutvyEmPGqs|PUA8cYN|VNlBr$_c6A$Bhq7f2p<_1Y-*57-;RFYJ0hc~8 zlspd{cJ%`WIL@3A(eV?btiAl$BJ*84dD_7Wgi;~At4mvaitQ;)^pB{uCW-MWlXjbY zXy#Ug`agy5AqrpZjDZ{Ef1H@&n>84N_7Z`njAu$o0yyN^2}Es~5{RCPyeyUeoAy_|z+R6$uDp!h3enl#&W=^f%e z^QyIAq(~3Dl7aSF(hH5^?mvt>NHK2n#slh_4k({mg@} zzoMai#D17gmYSP<`tt_aa=?ETX~KRD-NFpB?m;=5_kXU ziBagN&r?Z6PE0HaulYMu%RY;$KZ(a^Q0mmUU(S4dwd5@=p9M{u^&jB5-Gj%}GDu`b zXXL*%#O~mnIB@na-232mq&Dg|6txtflZ;>>_`vW}t+`+fW}AO-Aw%%$K*;SYv!e|K zL3oqQgy8)?_W6*1YVKOMBbe+r6}o>G4N3zTQ)1kuQr_!VH}#?q1`?)EQDGMvXi>Ho z;1dP(U2#Xiu>ckAeEL({GjZt5p0=j6F3Yk?d21#M0l+>tn{aWRlsEkw&yOgqT7_0J z!>qaO4-!o0TDe2@w=Kcv%&FYt3^Y_J`5F*j8*Dm5_f`Y&rnYou*s39MufZb0HVU%Q z5`JKtv_ad-k%Y#%>0&$lTwajkgyw!#hVmrvkc(N1qcz?u7n(33U5jk00|r72{@z;# zNb(}B4kQt+PZF1`C_IoWCY?}0(S|IpjQ?R^oGzYYe@5G`J0`GT?9Rl(G4_DT2m1`1)r!$VxH5T5-wtM-b-*gXe-*Kg!03m* zcg;zC>*0o%El=fE$^#|1$j8YpZq$A?*NI{xB3FQc=J}F0x~xO_FML<$PQX-F;ck>_ z2{ar-KYfS3S(^RUr(fC|VB3F|aOW)k&)0dz+Kse^+SK<9r7#QM)W7HVVxsoaFZW5iDWTVnm6Qp=WyCPGL1o0Rrn8dW%zhN!%rm6Y86g*i2sY>gs4wPf+v-^xX+Gjs5o zY)GAIZ(8bamto8K&0iP1CejBp3W5vwVkn&*7M~Vzi0bTZV>i7UANG><8=~rp;pXxb zN=9L775==E`XIjKK0R(fdwQnXeYfB-oiZ>>teX%fH#G9=5GoXT0;Ve6Kr$urV(^4h) z=(ftm^1FZJ+cUj)7Q?+-2MWdznW{w8T5P`$UDXCG7C0vSQJ1WDPaLa)D8TfMd%}Di zV64fDPO>_Bzr-rW_O5l4%HOG746$d`BZxl9KFJL<M_5SP^sx4Yu@jJU$IUeyYyWT`Ab_2SR+Odd>a~|tG-Av)i>i;C%HKyQDH&KY> z1fOI07QTl%KUG3cTZs6bJUPYQ{B`H3#5&8e1PS$0N<@-1QPpI-%62)4)Z=IV=nhIX zg*TSH`c~{eO}W~n7W5>3aEbHILBKlXRn<>Wzh!o%e7lJ{eh;on&Zj*GQ@dp9K+17Z zTin{4rHMpICJvT#WJYz#%K`gT@{RMQI28rJJyXJuDP^s?V~!h%zP2v`;N>w7sWIC< z5g)_HRpFN;%~a!jJjQ7t&iOxR(RwMvQ$2)C(BhGS^7$wFEx-OOT?;<-)G1U~+{te3OwinlJhQ#_yIHXG; zy;h_@UwXPy*6ycZ#^K_161g= zWu|w{EXYdw_>8Za#VW@_UCX?1w=XTZLz?rA)}oFAVE$9{q1FM$anbfyC~Eh`V&Jy% zqzR=SW}T(Syon7;j^dbW<6I3%ukX|wp7C7M%;eOk*nZKGKrzeVp&riaphF7gu+?g|tp_oWylOrm^pzp_S;BYiom}f@|(Oa@2&5bI>$`29*-WxyqY-S|3vzUmpbn`&9xr zv{WRzD7K7>_H(6i2zSDU)ZTf~<}qB>H+qao@$x(dqlr*CwmOnBK^<(2^Zoz(U|yl# zj6AYa9m^9@6v9r_II6@)x8zdrav3qPsfT7~_#E)`j3EXaO?qL;!vz~76XzRh@{HCp zR+8xB*o89ge|>|RJGVp+wi+h#XK*K^wWcTo%4&Iw-aZHs0jwb*l%sr-zY9tj9;6AR z5|q(ysIY?~YjZVSoU|1IwGJfl|vfe5SlI0L!f?W>u89%va7w8FPs{Ksj5XGpc!zDRzW@a(=3r83oyiDzpUPDX7kY&>f|od^PmMO zdd+`sVHsTN?v+z(bqQk=d?vUyO3;_rGk93U&>bkAT7Z9PwObSee?v8-=g+R=ER_NJ z^<;Wm2EU6&u0_dY1f5;roF&rvb9;+g72sL}8O0PHfzyhmNe|3Qch9%d@B{f2CDsVh zIPVyaKj9#~0P&b)nI!1@NiZjwjn|f7-?4184_y2>0^#jed*vyBfW|k4DtRH$C=(X`!#ih*2m>qX-(qQvK83Qz?#0SURHsQ zoFfA#5xO>c4ohflBBW5SvqAFBHpwKV?9=|qxq4$W9)UnB{I~QQTC<;HB$JNJIx=LB zuWE28)IYXvmye)hp%;*s4C>Bf4L4}B#NWtSQsc;TFtCbq0k&-5gykL?fOtM`mHCXU z(y1mm+0FdiA5?S8uc_Q_{knPA$#PyrC*Z2&xLvxf7n{%rW}(op^@-~k1)-VS7Dl}^ z9dRFT5+AKuSa?$_kQZe#vptuegl9@j%Hv8xvxlu;x|lO%)#MO@*<8|B2Rv{4pL%-U zJRThfvUNRP)@-rK+(tV+T|YfMX&fz6i@f5ELV6U&_)OP0NL#zW2!U7IFCMOfmHUTg zy+kFS{EmOIC4yu!UI2wn#!E<-1}3w*Zv5|(%q~2ObFL7lnx-;Uha$}*<}Q2U)qi?9 zm*hmH44Q9GB5}lF%7z>+zqo_qV*^|_5MkhXm#Xj7uB-2%oxeg<@|MIU6g4>okRFv-(CthTXM9Y)VWrNec3pLgV|`h72|f5je^B zwI9+>4z*ea?|&e<;wzn1zE%A+m%Wq3c@P>`%i}pO_hnlBiZbP)!%!N#**bJ>Cm_k+Y!c8p8IU@pn&9-Ze9h09H|6=a(>%n? zouSz*?`DK#=Efbtr=W<=!}K`ilF?py;$Hm(da9XkNvGeETsqU}dACyipz_k1(zn%4 z#3CwClk!j8-{sw`8C6!!_%c}THql`%=k_3VoA0Rs*W?2B*UFKL+|uU4gcpdv%EEzA z@_vs|&%=Sk2DfH+8pkd!o%yo+-CJhzKl%?xJ{mx9dKoUSi$Vea(vPBX_qO{GKY`i| zEW7Kf1m`2*pU*Ng@~53%xtz8k%qs@-hY}hfFDdDl$op6>QllGA(bRAU=(z-1{28Td zqvlr!&%7`wctEsTt3saY$v5uEs^;7Ma;piL=|Z7H1?DCzOrYLH){Q)&LHoR63;*(B z(#+ss!*4+o;dJ{(+W$f^@NCU{Q^K2W7=vo)2WJZGi+Akshq#F>lj>z?(GPH_d`6N@ z=lq19H_798I>jBNv!_PmZt|IIm~2*2pbkCEeQEyIF&GP(%MmvChb?pqK*LWEH^f=J065G8+*70di{mLA7O+t*s(7K9$iEsbaXERh1#6RgHOI3O{R?Vp`(59dh`s(CQ!QxBGO`@TB($3c8XR zgm>NFJ&$nrhsbB{nd!$ z_Qy)?F5s)XFvpz{`1mF49I%inZ3lJ2xR3rZS%LyvK1>L29&NWgpM#pfr>=~r77;p7 z%n>-;>3Bkn;KRtH^kxU1qn!EesRVO-a6<-4ufBvuJ-fa$Em%GyzZgDFSZICp8iiMH zb?x8YCmfBK!_V!^A5-!ln}GqhsMK@`I(XE|#ckv&xO}GHU1-5b+8gUW=$%mHwfx@Y zz(!ps_hYO%GE|4XrVo3<@hNy8i)+S+F_W16uWldq74o*CQ>u$=6t_D^1}hU$P(WER z$``WjTS03rnz%;uV2;CWZZy$tkMbcpliRX0FO%SF<2gT&%$BKhCc2EUpSp}TBd6Zs z&Z?HMF!y@+XXo{RDabj@ivo$`R61L_UBtBX;XZG_%+vMXn?%Rf z*d};?SSPgBq3OcE3o30H2z5q<7%E2^W@LePtz(Cc<EL~4{d;=1g% z1rT~SU;=OTg+MAUc_ygb+E~FKJnbH9A0nkZmJ%Q z7$(%BXe17rm6H7?^0ze^qD-K>Nd#UzhJOQe*l0X(NNzl`Fr_Q|d4VMsB$Ahb1x(!M zxJchblfz-JLbEUUaJZg#vryTa zGUW7|twFZ|u#k1~ArMD^xQjw|4=2Rl|C6D)qxG;_Wy>Cah2ZrX$gWY|a5 zG*P6r$*(x#XC1NCzs#~Aof#Oo+p!(KE4%}L+7ZE<6%?H+lozXy(`ETspk#7d|6?=@ z-<+@zP1YtCyTN5SA%5;?v19PR#U;?|YcY#uVN*)e&P|(Zp1b(NLoJlN)4kP`(L#Vj zxPawExX_L5nuDAla~3c6w-P&n0sMD-PF6!WH-heA@IB20)8x_$>5KD_vJZ5h4$!^? zQqyWaSLKUiKCnb^_H;}E79dF9~ zx4t^HA%BKCE9LjN=j8cx8g6Y#LyV~pjG6C@c&@`#=~SX6wN=gl0fPZa)pu6S0g2&H zfPm$yL2KZ^_?f2IP^L>J|2R4SxI^}fZ(y-umvO>dwA*bFbJ`8qmtvsw0O16`2$5EV zpfe9CL<0IaCED|l0RNpm>_ehatdaG_dW&Fa1ku7Ko%!8|LC>{n1n@HA=TZWOnBrT% zq(6Ams`O9>cnq;?kj4q0#K%p50wXm*eb9#Lw|+Q1q*KT^m~ca1j_iHPUv>jA^)SG( z8f>R8h!XKId+S?M@;(iguyoZYeCTbxU}9rG?<;)Re04DMB3t-sVa|NPrw1bAIDLmV ztuxT%9q|h#8T=x-+#FwP%HvP9nTWYU8U}ZJqE?ZuxOub&91U8Jksfjq6g!bK!o^n* zy0DAB`i#Z|8|q^IA50fkbxSFRE6}BsRO0@#Qi{sA=Cw0ogUH%Y({rdD#}R}%U2=7LS?v=1o`=mHJnYC4!zF7`bR#{Gnjzt zkCbUGxnrA#4;gEi-<@rYeu?r68Gl^?S^h^NM-4KH;GC5n$eW-d_UWJ^(X4i?;P1Q) z@;}qe54fzbc26@;aOJqFR4f>8RSqIi=8s7=dXwW{n0x=4`c5Oo#CS_u#Fy%#PpG_D zWC{;vr?$FRtnB+5B3vF0n*VMfQ#ZEH>ch@k~uN&0!BcuK8 z1T#S6#9JyjDrb48`Ti70%3^5o6O0tmm6Lu37+5wTccbX|HMlkYEs3e+;&>}WbBZUa zh!8Q7lZ~Fs0+_~?{S#ZmOogo{f~WOE*2xTmGd@P9Gg*SVq`q0^^%+L5;kuD0N7)&K zeAb=gI|Yd$8~-*=XqYCk-flC~AS0bUkXhFXK;g0W6`=&t$XI<$NBw0<(7_U42H}|+ zMz9sLl44(Q4#R4OgL{ltgk`?uCC%9$ zvb9<3NuLPsBYnXufD>Btrtn54!4QgmG{U7~Do+rOSz{eQ8ek%DyMw>awDI=qCu3zN z_pVA(HiIQw(ScZUXm#Giy4bD5il0KqY{u)-~P9{e}9G#T2j zd4mBai!4&5#@PA(^3!sHXAlOLhFf>=emHNessH?x=a0ZF9R=eB)*IJ$lmgXGNIm3@ zBG}JI3+PzT{-(Np&J%RcdXht&fd-F5VBo{2|G3|(zj`Vi9&lQs{X2u(y$HA>KdCgX z+4SzZ&qJPNcBOTpj8&N%8yiN*nm)>I$&+@xQJj&U>TKW#lmM_myssis2P{>6)kG#b zQ7gbP%IXv@znB+DukmAXB_{FhF)0k zo@<9)swJOSs*A1abob@4VXrGBrL-`|F7yQGRkL0`xx2yp|J z$iQ8rnIkauX!wn}2qxu(+40*U=iN71nJZKZ!36J$Uf~KV^W>2Q2l9=&CMbb>BvbJs zHM~m zwwBIfD=FC@-^d_;+YBswF(5o_TPK;kky=v>S;sa?OObVIp?yJy?0{D_F$mRAVYV!X zuW3r?9Xp&n=TZRl$--EX0o!d>iw$CJc`i8)C7_ah$btI^vn2%^Uc-k}Pnor5tV)Rt z80wtjrT)?KpIV9G5jpEfNQ_nJc|!M#A{J9t+zaQ= zw2HGtI7`-sB!9{kmQvTluS<1%zohp^y&bk;9XV0_?gG|(JM6(+55;z)oOSymI#ZwY z>)Z6@JQFw!&DMyg3=KELhm1j$>@mR?R~T%Ey}*q&PQ4oT%E-#!e{M^QGdyisV7Bc@ zi}2hYxSivZFDgBeV=IwQh2zf@@`q_*y!}NW%0Fsu@qjjT$3LI&QxvrxFEH$9Fzu)A z-%bt(6ezM;jPzHbB=`)_TzE}WfQUS(cdJOY>%-RsC8NoMpkY9O0ps;G@s`9jJo8xQ zGbg&{S*0!MYY}|scoi1O_%~j(8)Dxr<)TGzTqT?d(FF0!>(Fim6fj^R zPR@lxX}rd!mN`2kF|#;p1D4_)D#?;;a<>gs)vQtBf3_B~c^kT8oeEpQsIBFpe;cjH zjTS|U@ll@Nrs^5cy{h160r=@p%w$Lib<9QjBUhKBh@~_BT*^NV{Vuo-E}w3h4h9Zy zswtQ8Q^=bQsQWF0y%}!>93B0qs_H?r_^Z3i^vVKd>k8!tT*U;4cfH*in!D1Bl48KO7|R+Hg&f=oXMxK%GTm&_cZs7W($63N|> zMg+xKfyfIb>Ca`4QX`m}uR|44%Z8YUJk?^_Fb*eo!||Oez;;(rCFSSD9AMd-(t}pV zvf$B69ve3=+i1KpgF^z{T!Q&DWlR*;uTy>W7+SfKR zC~kPk-R&|!l=r zkpSfKpo^uPF=Wl()2CJCyhY*jIa|BT+1fVPe4@km++UFYL~{JrjcIvutFln#7^f~X0@=h}yC{(j@LDSBDAc!$ntnLmBMxxaMl!v7+! zF|J%IqjfS!pkQl{uWD_B){T&14->VoMk&F&jF}$UBe+LC#Jwf(Ug9L|E`?fiEH}WB zfN9&R8OQgFvR=nH_ZmXLU~Fdyp3EATCZWRdsaJPeNX%-L{5vWaDh4@I9DezSM7?V( zL$A<#h46djI8ii+{oL=ldyZay*J4f}M>%6A9IKq6eSC`so=ep2?!APd#$xLcu8+=H zmEnW^s(LwBTIc}P0h!(hbiU3n=<3?1M)K{`P;Ot7zIJ|1ER6>bN?#Sa0Z$RT-_~}B zn!H2&kbsigGLd+QaNX3+uxGf6r@XtzIlFnZLgCBr&)7H1LP>`j#E5_2W+fV-OPc=} zzK?UhQs_J{2qn<(sj*Xh*)tJAn_K_%DUVuX!uh0G?;cF&Z|EigEot`39#@wZj2k## zxNL>Fxtm?}SP!#}tf-zW2`d+CEc_ZCbnL(0a6^vn;EJaPg}NU4WA@p1ta`S)lnEjN zBCctEAqwD=E8pbX(GENN0tn5gdY3AyF%eohT#qgMp3cY_`ho_Gi#wA}t!&h?0=0au z9N?+j^U0z*@%-=ce-=pMIqY3(qQ|SIhyPgg|GD$EF@umQLG^oobo7&hE^8jsIdfVG ziQtlmcRT*1Im70}Da|1cM@ONJZeiD2I}%-gi~8Ng7W(>1^qhkv@_`JnTHK|!dwcQY zsa*IbI_f*@F>hvT0$HH`XVIMxBYb{u-uwG;WvTZBA#r4;U0^ylu(&QFNWT?LxyvRY zR;dEUpROBO_V85FOaD3}KU+V!A|r;uK*+l+Cj8+yRw2 zs60oM+*nWSwq$+iB|HuE5o$TIG{pAMG!Za3{SqX2-x|ovn~o@ZN6(+hw@R8{YKrxx z&!yiT(JZ)hE6Z$DHC@OUw$#8Y0_ZHiqb$as623I|{gv6z$-q7f7q-uAX~2YnTB3Nx8F?Bn2+ z{6jb-oqm`vsdUTFjcpKK_R0w_dDEWVgfJV*>_$EB7W3MhI;}oY!_vKF>kE z@x8avF8$wi4X4{=eogopzC4Cjvx$D8^bVm3IgJ`hZk_0gX;YZ;Vl zIKsQOT5rtSeExZ#NoryQMkdQOUb#c3fJGW_vXa>e)c@IDyzHuiJT<;m#<|9820mbZ zpZjG$Chp0pGfy{K~7S{0a>;f zweA8u-e#Xf&eC_#w-pVD4Xe2tvA+4|_D=sAgVVxWexLqem7)I*xi7C(q&-xa0)6YU z5|3LWROk?-j-|~=HJ6npjg}u*kzYdp#V*QW$IoT!CL);xl0jt=?BaB>$#h(HN)ocx zH~*eunU>FwS#(bq=v+L`I9+@DaC8_njy?&zjf4=ht57yC=ODj-QAy}j55&q0z}(Na zOcLn{RF%NS*~vhR3D0bu$*!ETuObGcxIo5qghivZ@WPr77Io5L#E{@BMXd%wNjh zNEvA)e5lXQdu!)Ij5MBi_5s-@!0K)f)9p!pJ^W`_VD!T?%($NhtNjHVT$?g-0Y{r#<)x zuMTwRl=-i71vg)HksJnwuBnqVWl?p8{8%0^EyI>`UZN=--Q%-sJvh~X*c_-Wp) zv4v@>@%Fa&dgU^pX16KxYun9QMK8QEA<6q!o=SAxQ!`hv|JX;$Al?^3! z{G3Y%;%L5Xg}At{?otU_^nT3SKmIxcC$lUHYUjRrXsg6Lu7MoowY|Tq zkSKX<>K4t?=yE>jJPhd$66Jf++WMc=5;x=8>2lp--3Ch+7saO>)trK9V+Yc7!LY>n~n_YudPn#aV7jPeCrnygy>N|T7f zakC3DCw3LcPSB@n;I(+i?Z%NwP;n-o{zP_%o)Xv@V%jtNi2uH?3Z+3`JwpUUTC`tB z2hlQARk-0zvv@vz9VJb_71TU|q2Yn^V~~2!hM0f<3`H0ieT9I*?h97wc-k#9RU z_xT6q90oKw9vMxKPen#72CTdh95!q#Mgbi0hO^_De0ZB(LsR8+BK5BA9-N>W;Z}68 z36EvU4*}K6JzS+bB^s@7&0%{trRRmvdHpb>gr@2NF_s?^iRWC;p>CxfQ4XT**@AQ< zpWNuxL^G&&F=O@N$Sx_A%qDrOo4?}6eSPITva&!l=pdxIYO#r97X{yT?YsZNvkn@GLY7fU=K~b1&0@xFlg4WkcQxis40?Gm^6*QlRe)+lE_aY}fDP%g=LQbFF;Xs) zWo23Vs1^hkBEqCkKY2!yi*4sLNTsvQ){c7G!CEgx`bm6$tj)Q&q9fPdE>P6#Sop^q zh$>*6F=hKz%J6)oI=9OAWcIWC2B&F}s@V!8ANI51JRVWZ550gZEUclQ>bRqlvSegO zO2o%RyUb7| z`Ti{pL_}=!WWkt7x0EbMX#FBuv(`E0euVHEozv)Ag;WgilJf_~W!(V>43ipjKkEMF z4mDNc`tD|&TXCRy>-S;9GR?*S#mto1v;=7?+qLcMX44KpV5!2NrXt4~$9qTAi~;e< zedadcZhp#k{xmSB(J`nCWb0;YMVRnB_uK5$VOeewa6=TsbBqCVK>MOSfL4PcpBlIE z&#tg(C&xtMy7)AzLDW-e|0nnD=xag>zw(I1SYy%v^#giMvPIjdF=bdTLpYyl5{~P0 z1N@s?+vd*Yc*n2gMJ}OF70g&?L7e>KOul^Lr~!*F?m?WmX z&u?&TUmc!n?Ifi9k+54vcq7S0ux~|6<7-6aW%;&7-Hsl=@8`Gt>X&^Nn%k;=Gw?IZ z+n-iMs6Qe^h^C+_;jFmr9oZgbo~KDcd?5x~Uj52YrA$$31JB37KQT}_L z1@C7|ddl?fU`@v)+h%MYLyfeTUtq=Qa%0Wu`;@mUrnkJg9aAy5ocp(=rLAAdT^6C5+sB~(&fry45a=ETw4%W9Z4&O*cRy-Ec>-*kky zO~r;;Q_^DS{>_9(_d>V9sOe80^h6}@gyc-EPL}N zZh58eaHDhb$1d&7Jv<=QUS(~&dHz%ro?@G8Q@`uU7srtqL}L0c;wDbAkevtp$I%7TQf4pcZ+Wa07qg^yMJ zqSV`ij%)f#sHH+=Imq-lYHfjdbspHs$kPnnh}`xWe8-*qdk{F3_{Ytk>^!WY=+zfj zob^H#118zIn+p2ZMSv`2za0z(u?PH(21M)VS+ZoFbkZ^WF$1~s3%C`f0vc>)1#UKt zhHF&TY5ttB7#On|Z4peObRU$F*>1nuub10_@3@(fsL%hI6;+-7R9DIaKg3xkp z(LM7C`~rvFTIq?aXhJI_`ZYccZ^M)A!^f8*$`u{5QrjV$ChQ|s{Zb_3adcAO z<(_*OcPlZl$?aZ!l1f+fT_!e$w-k0Ikn8C`D>~%n@MkP)u!5>o%i%OXMMNcJ9i3~^ zyK@#Uo1T;wP%w~%@nfaM^zA=`g2DzM`X)Dt8&>4nS|KM)%^*(T*!g{}BZzTZC8XL8B})OIgzz4Rjaphg)Au{{1fpd z8~0ad>%s?kS;WQCPdvb{64YEY8zH#!FSc{8hrj(5y6F9u5`4giUJi9r=!LTwIFfAJ z$yfvcO{?MBC00&rxfOtEzUSOY&AzN_l9@hcs_5F=C7K!OnwdXG$$u`5D?ox+{LIH} zuKv^=1O;+8cjk`trK;z1%lqoHp6Tkhl9uvsOyfd$#j3ZMIXAK5(RM<|lVYS>Y+saH zr3nuw8%D5OGp@fYBf7VE*kNtjI{en*^rFs+7!Az$eM#55z=g-+%O}Ia$Keu18wS_> z-KsRoOIk#PVr%=;ZWTqEm|SMP6E-hJ-_Wz>pDzVr)ZQ$1os5l(w#eD0KOtQEKHsaB zq6cTi)VA1sg*&*$oZiAt`{w57v<&i7Xh|D)o0Xt}lrs$etwjePvp62*GE3w0o&hbj z?R9K;6YW|ku+FoqxL8zQ=X^)K2fn}v?S4> zWaBF7qDEV#zU1-C(5dCUwdbjkHZOn@ZvGm=xSa|+9tQol$?UR^;fvbp%{Zaqs;ZK= z<2t1wN9GTaxS7Y?6U!DBr*!EdE9*gld=yRsxiBYaAVVL)jMYug8vgFCEBljeX>g8E z$Q`QkfEV@b0+(;=r``G z1Q;}+?31z@{Gj^uv3<94BK${R4Goi6lIWsJ_9!1XOV#w7WX1<;sxiIM=1^CuBS*9dO;jSw;lG;H2ioy= zz08H8Bk>M>k^jRK^XYMn$^14%`trRNea&WM6a)wU!+88?6}8P(^kq)WDt zlm`3{s;j4?OdBU5`&!*+eg4mE2`%zhux>DF!2cWmgahIIh96*YNa>|XQ}eU6`ku?c zQON>A;U+S&<&-=m)!2aZ<&>Uq6TH66$tA|^j@S8_744tr3CW>05qb^tSEzd98`WMa zbR`x`Gd07%XAW6~L6Gqs9n!T3e}J8w)(DTosowrN~s5 zX4#*H7+px%%zcKz2U;Y(e!P$Z`a+CveC=<=Xc8(#*|hNdgh#9Eayk;BFP-aj=XI@U zhhwUBi29_&H@t;qo%U0>L}^*dVazF?zBDS#uPiqioK@SR=@!=1O7}#x`*`Gd{H?9k z&b$)Nqq4C21$Y3>7`{$%<9H!7`sc$`@?X_p(7Vl@Q1u|xu+@qn*Fc6j*72yXL=^0b zWK5Sr<{wC1Eo^3;q4BbcrYJG$+Tx-HXEmzif~P3TBVQ=P7DWL2>R( z+;1{P;pi~K9SL&JhD1yHjSr&hWG;~OR1g8M4@v5sy-Knv4FE84KA=u~PIg8%+1nZTiv{(XWLH9sDeZz{JX4&Ou2JR0tu`%40Q z+)p6IGJLi5Y@!Asz9^r32EjT8`uQzuw?i>nICx?xn z+G;}Q<2lzf$|E+*yV&vmOTkcZ5ssmkiO}3oXMMKkifjB)ZC{^ci2y}oI{-8bKC{NE zcM?F)U234)vBPTRqc~a@-vIP#PVpYmsdV+flGzZvPkPs)+zh>DL6|qZw1s)ZS2{L= zn48_=4;={vsy8qZtY7bAnhp^&Y;w(9$HJ_uq9M-OC=>G|4T2h5r09KiKj0Hn2^mkq zPv^G&CjYx5hwxF%SD$kz2RL#Zi3Wt~AD< zz=FD0<9udoIonCQB&d*10WrK>d8qRhqF&Z5J54aO2Nk0Tc>gZ_@xoy#LI9UO0Zj8^ z^CPnh>`TK}BUvkgc)oI+{Pc&S$2V8wlnOx!k2UPB(k;?FarHI*7`iYy1z0KJ3$b{7 z=5aKN_mhM8Hec%J2dRcf;sDj$$%(YSoW9(q#e*!LUxUYs_+y64dT1`mu(eO2%uI1o z16)i1wM7OWr|pP-K&tT%<2bEdeiV`cB9>35E}pOUb(A?~S^Ne<3VqGOxi5CVG3t#W zx@`yjCZNAG3K+{-IXyWidsN?!_VvCsr@@9ScowBRuXc#@Tfl71UC*|OMEgV6l9(e# zsXhCK1lu5u2$Cp=x%X4_uJ-QbBn}%W6SeuD8TE5U7=;l<-9kbi5m#HxHQ@S=Bk%}$ z2v(+~JVvGZq5=?5V7Nbn4hx#Z&CTu-H@XT73PhmKJ3$5ouTX9eY34-?(joV(wH^?C zV-2()&~HP{eC}|+^4lWR{+wZ=deN4yLjxnd+M#uLe_z9I{^6KJ6LtM6l?^u})jbXZ ze_|S1^~iz3<``X#M6dypkC_k&`04X2X+n9vB%BtZB@Tzh5p^o)I7@&hqn{GT3@yx; zf$0Ls(S&h>anonh^!A%75t?c&f-srfh{-US&-@?JXIU@f1BJ}cNrZaOmwo-#aGJCo zE>SDAO?`efY>IhB5tDC(+kaxp>eJ%>Jw11dO*OP8{01lGJWik>3Aoj_HUCDNpErC+ zk-a1V-kO4Jo=PUE#9ByUpjVsP6|wzY1Qt>yQcUb5 zuCZwm#N6N-%o!4=oFwIf?yLQrP06&Z9D!-0MJ2!@Gm=xFsdwry9JnHs`#jiX?aNxz z>orBv1Qe?LtIxP-_lfd!yV8ncJKA>UKPsta?f3QiJYAa< zOz>r1%cdOIOxCzXo_qrdB?lJCo(4mA5y^D{!ntRl(j+SI_ zb>|n89r==69?@Ag`4w`2Utc6Bh;e%;8aT$1SMuk_c@M+G>>-_jRdNQrs=a)mKye zYp8(QG{-cp#M4t8-+-;6SJ}ouq2WP1bJb%q1vpx$))-|(er|f` z@uB^{M(MFx#wf07Xid?&bn(u&XF@^DRUoBkh;O!rsUDcTaFOmIe2_VKm{z`JB&(y`4)H?oG?E&K3z1bLzO zA9R0aS5euX)7<~I6%100=oZ$koA|u>P8Z4N5)#G0d1BH83Ekm+T<5)T^jkq*q7iH= zq!d0B{PB5|wd7a7pw-L)TEscnpHSZ6NhAQ@V;{*BbsqrEM+CEk?dT+Z&lIop=&oL( z^-dqX2QBqI+VXX2MpfTV6en^|ZsjCA21@&!8#6$z&u{u`?&JL1DYsTX(%A0?wJj*O zcSq=K^D(vYS z7-<8E!Pw>FF)KRi>)Ph)pK}ChK4~S-HxYq(bJSW9o@N>Cq4pl8^S+BwW%AZ{fYVe}~vd>K$~4XPR4q%9KgHc0`T;zDR`2=eg)czKGK zFtSX2h_x4r5)3ft%_S#NVrYihw{p&Kjic-BmQAQWu86;3g^djCxsrY~qGseM9dNLP zBvscdn)yBq(ol~LM_3Rz`JC;xWU!>a{X)u=t1&T|R4|+)nohZuOrM7-C&)ip{>&zV znE)(cIOy+OD!||aZg;YchzZ&TiL}mc)iaL@1*Nx?fQ6?r|9}|{RJYD{)MpS)^=u0w z&F72N3PqrS>YChI=P1qDh|$st$(EnI%~u9$VUWFplBIkWeqwhjOBfXfeJt9MQOgB$ zuM~Gytij!eO7ko3B*UdG{nddd!Y~kGYLWS-PG)4Er5fFH092ihum5Pg?gLi%L-KzB zM?tv0aOJ5cw9UXa;|Q(-<==V!TqbQcwMJim1+5?)a&Vy z7nOawkPFl?rJdKV_YkJV`-mnJ=nDiH+7y+_JO|^3T)Kzf=fJh0h!M>h0&ulB5lOj( zgL`L=I@L6hH>R&|@FOPsg&Og4v}G-Kgt<5TaUD1Z^GknB^AghLwwpD;rGk)u-ZODt zDxPTs;5a40xkt#`gsfxuBl&RhM1Jtz$MU16-;;0OdLnmaCX+eZ#VPs;^sP7v2scFi zMujY+OcudXT^hmS>KXDz`OFcuF$CBw0h=)Zm)ixG6Ji|Uj0MKWwI{DsPHUuJtIXp( zW&j8aS!8o`XMD@wF;nK?QfF*X;m!Khu>{J)+9ttmyMG#-EI6v1ur%4GIo{^-J&Aj3 zpC4gP(6_OsslaC)vOIAJNSSl8Rp6ea?E&pb4GQdMH4pqw1^Pzx!IAbc%txX!gMWH% z<{`oOld@sgpzRJW!EnECGMQyu#$!7T>OFDG%;9*-5Aw@$<^3Q-JE#2C`W*`#&tieg zSSrsbzo+qkDbvXq*Be5HaV=m_<6eq7;RmsGxhB>I(`SExBxoa1nS>i?|8sd1))qii zzA{*~5tJijmD@CK@L3Bb0Tq<>vxWa1x>pM`(jd za~v)K=i|zHxON=NQodJD1tKaB4<5@0w?33fIhCXsNgAT-4SH6v6gc=!>B@f z%oA8~hQ${6veyNjeSL-KJ-^E1Ut|96EO4YtkntglnQw~x_zZ`FQ`WSCw*$`I6aR&E1! zMjlvRB(J;g+KH8&_L8vkY@%NV-EjA+O|a|PL|wl03ej~`M2%>_30^IgNeCyCp8W&rK3t=^Fdf?@rgae$k>EJEz}s{I2`^u{r|50XCHVDzCdkySn6syCg%9}%P+swQQ(^c1|vIhXE2S+v+HgCi?O?r8vD?7 zj89f1D~}3&Zd2*b3Z_DzZXehn?ZL;=pJ@`&?3GfkB({oe)e;5c%!%w$StxlA&|%L}-bq&a60z{SG~XA|ff@FY%y zZVxBMdBF$|7knNk{c`7SD#GdN8|F>q_T7&F~TCrP+!Q1aM- z+YEQdai%~Gmj;58MgpNR0DiO^GYlxzSb%G#oKtpC{;$`Fqslm3&JM6|4p^A>xfpsm zmoI*BPMB)Swd`p7SihK1H?s$v0^XMYar@B^(}2J_)`v%Xi3EKv4N2JMST&|mmPUby z`+3J{hKKS&3$GV3vx5N2JS)G_4g0mMs z`Q#H_eu%FCPy zMd%bC(zx)HXlraI1xRHJjdevSdvz$c(Ba&TV!4lp{|7-V59>%q%R*8x0Y_OWDVNeg z`~>YbDe&lzB;7}fkyjN5bXqG#MhI`PBJ(4S0RS7SY_jEXs;D9T4NGjdujit4-<@%6 z)O+gp4Fhy7o@%N*@}1nQ&edJw{~Xkh29OAoG}3EgxsK15ub`Z#-l=%+xnJ2ew-n|ZB4U@ ztJHX||KmqjbsJ>+a&Zt2*|Bd2Sle42)A;=`BXP!0#bS$WU*@h9pBqRqW?WCC&!lDP zw8K{P@^&U)p1YMyo@89owk>SiHb`TD)CuxJLjd2d4%85k@!Q`Eq+hvxuan`48V@Qo zsUzgY5cI_9l$+^zzVmN3okl;NCi?VFfWDe|*EAv4a{bNbzKJv0oMqF9%O~IWi6S$riuF& z_v__#^iQsS9oaq$mJRxb2-g#%uTN8)m$TI($PuoX=c8dM%PU+5N<2qNLe}b<%L$E; z2GWB3phPtN)hvkCebV-?(G~Xf19wIglry{pQKA(18OHoq+|TP^AHp!soN3&^>SPNC z^ugrdvb1aU7@hld3qgHv|J3;T$y&RD6NdpD{0I3;=Mc z^f$MRJz{%T@LG)oQ?yjI9NJ|C$Emy=V}4+mO9mCW)D@M?h2%B1X%q;+5e}dZk%?7q zDWUNqm+3s0*=a80c`36+B{M{w7J*EvP)1cCiJqul<%_WLQMchuhhKhO+!dU?GD{LU zoK9tLJQiJ8q?}8PIvAteX&i7f0@(jUF!fDm_tS3;G(VjZ54w6~h;#X&R4Oug57K2- z)K3K|_NpcW zN`BieYiA(PeP%3xOXC1tnlSa-0HA(r0P)GZq>FTD5Kx(K7v$GsdvLxYVkNrHJ{I+||lWf7BUi%*^|UdSS&QHI~5!o4ry z3;`~6#AS*`Di3^8$;&{NsQ)G8GKVav(W&AxRxUltj2cC(Jb2G!8`bto_+fN!23+rn zYw+5-wtMt_B`QhFtC1P&^Jys2`hmL&YjMCi!Ghg|*9>b@n>b*=fB^#r47hoC!y{4m zaBz9<3Jy3nljG8D3`4FdwhP_BcoVw@%09b}@yVrjxa1CD1^|+Vf%Aap;6oAP^Eke_ z|C`_ZMqa&orR(m$3D{I^p39aYV)}pgcYmi3ZG2#}fg$4<&NEnKe0%GQ<-zNqI}9|> z2OE@Mme&oxEnJ2-9hC2#*eD-tX#x_xj;iXZkS3?tJ`7{I9VT*5Qn_7*ax1H4e_n_z zbE!ee3aRr#XB2Q*49+ePu8n|Wsq*34qZLR$*O@d@>5r2t>j>pdBFx_Y=X%RD3Q+N1 z(2p=R3N+hYb#@U(NYAI=Hw)4?y5%v}bZfwuvUgI-WM0Z>QA$YV63QS$IMr+V)_IEK zQ(RL*MtXfHX^F~O;=Gb6j-AjLu&iZPpsXwO*>xx}4(03soJzsxcD>`#ZTvUjS-ux5 zIorTpk)k{&aVq=ck?f6P8KbV!8uvGpeMRy*^QbR7uLi%C85uuxxKfe-ns5H4Y`eB>mfHpHg>Jj>!Sn3kvlrjb*Rk-F$ z5F(IgZpJ{HwuDKAG%B>rN)`N#Thp{;+cX%^&-e^)j%%)i-JU6_T^JfJb>IA`(*k3g z(@d8FyPwSDqg#*UM~^;|KX~%7JdS2^t4d^o{L!$=MWA_ISyIVzRLOC?1ap~3bIF1^ zWcC#2J&~}SgKlPk_BN37g0c;l+vtVhx-hqI?bl<}T{Oq!lGFGAH!GKtRSQ`bOJ!bh zKiUhf$+ZsDX@KiP9<}cV{B~^RVKQto;LC&`#>WYhBU9Sz(m<-Tw>HN8E`7##eTRD+ z-IfL-?W55ak4kf$Q9#B2YL)@Vnw(vLQbM@(L#z8iwEo@-$Dy|0&pXNMBj<}_Su9Uv zQOr^1sNfJ%K|{hQmC z3>YwAz<>c42glF5un%u^ghpk@F1%`V4OD&Z4t>ns$kiKE8`uYaB$$eIzHL97&GbQq z4_W8UyFVbOaBw!j%aKMBStNa@Ef_W<%j}0u|CO8x}YxNrlpiI3HK$@Qnaw z6!2#W7#U|*@a^3;eXxwwIKgwGD2-K zW?*&W{%?R*}07e(L+rOQzoslSQr61!TbP~4 zKUY`Sd1&YgyE3RDfTW3yA4BHb)%=bCzX`zcN#wa~^}1r`!CVfPQe6 z4b|eK|Fd&hn(jLS;2BX4TwelTwaBEJ7cxTIzCS&XZ$EfnzW4Bb`PQxb@(?}hAJzo4QQGD|tfk*-diyT*E~>h?8lq~Us;>f-qO+{^(t zzAFopIb5E}5Bfp(;a^kKCr;6>%L2K#?_D2a=(o>=dmM0HP%d`i z^#CCrd)Rq zE8D?1RHoa9hxq`;0Y4vL_;9r=n7-vhAFi4=x#(y9nOFL|28QPuELxg$nRm{Vu>23k zfb+pGXZmg1{B8RCt{d(4a8cfLbmjRX)Q5LGl=H)f^c#~fk~D~9949h~5}9Fp7KAb` z(2n?~>&Zgo#fd8a`8K@vDKr8!$_@OfGDj6N{)k4 zP7{%g%Dugj$o@oRl1iCIQp8+3q|y%vkI5-$*Splp_VP6iACIG@T(pRhw!MAhe&dw^zAG`z?3R zQDrDYsladgG`cH8fTrY*Ss&}-8QuNM(lY~sDNQZhx#qWR%U|2y4l}n+-lMnCl&4OC z%KN3GZTtIuQZk*p{rtUbBWXHrjLvpG%B~yN zxmhl}CQEnS=eRW8ODA@$JI2w*pkx~s-<^+RN*XC}-a40MzL4c|F3SweGs$qgwH3E? z5e-(c@B`QLc_k;uZd_{Z$ntk~h6B*GERcqEgn!LIi$Oia`T_S8_cbNgXG0ig!co@r z+Y*pHv$p&9)%7(y8rs_f-c9)Jsfz;!3>YwAz<`UR>z;ZM_TlDbqAHV0QGAv&z zwbgCPj(QUxEGweXAARGI=*L1)PAC}`NfL!he)w5utT^dHolq@BrKi@St3wTU1x(jS zXx%pO<1pOc?t%+>lXT!u;d9Xz8@k-e>XsxPI6s z?g~@3at44ZQPFyw;+2YhDvu|P0-4HRx*)e3>KgMHgSa=c+3J{%y`kM00W|%FRKj}X zHJD7aNuvObRfl`~^7!5Z`OddKmLGofJ$X8LB1f_(0pyd*tLb`0*-{F9i#?Y`zL3*$ zF2~i06gUlyRyL!h5-ON;Z6NXXtH4hy3umvEzF?4AgK!~;h_=t6$ z*?*IW0r}7w0nI*bE$XhJO5G0FF{CTY*Np*dnRI@Vb!q3Y`0M+UdkMwO3~;jpxNY(6 zd`6e%S!J`0HP>mlWuE-@P&7sgGX_{b4DIub_|bAM0mo9VxD1gq2yo17#ss(g58sw| zMkHJ^_7#ZdX2X&$o-3#JIoIHMeE0f+7N*Y>$;drh7^4*B0usDB_O}MR#;)u1_jTY}e z`mg_59zT2}pMLtO)*06|?Sl=>8Q%;8B2~>bxqvO`JAM(k z^53-Is?0z-h*sj^nEMJ8kCjnfQn}#58OD8#YiR^{ zh-EqqcVX^WB_!;tjLRo%&Yz)g|0eYH57&*73ZoTVnYu>UlrI%B`evM6uf=h0m^t~e zHfFRi!>0XZ=;UM5ekwqSuCk~5j1TX~+XNMRfWGK3E9F*R%Tbog0sN20BT2KRMA;m9 zT}Zi{OOekZm+q~`qc7GSs6Fsgc|G`0$f_GoP;Yrz|Tf&(uX^b-~#ZWrMy)5)k2eS;&$~F65iD zA1J?*@k~-KsixP5c&rl~D=6bn=YiyVV>!7qkr%f|@@y}Xm#EXMC?#4{vd8tr^HB4V zM}fRdL-}$l@*Ld;XB>R^Vt0e=Rl?+N6RL9=^lNvXiYwQ?zw zf*%J)wCQv#lgUWFf0*mCRwK@`K=_DjcH^ED2dGzYnc@BuE+IcT+6v@1EKn~Q>JYUF zz9_!bdQ~-P&4p8RQ5D3YuatSUa7zmD&1`IIsJ>;*BWgKK(SJf9*cO~}bFGNvi{6Vx zru*GKz7g%-ism+Ds0dD0$8ujrMI_?!!=n5)f%U)ai(Q}V_3u0$#pce(G@5kKjLxOd4rL@$?bnleB;PuCEI)bpvHan;e-kv^>7HMgA1)MXlsO4-hF->{GU zPOzWb%O%(C$9WNl$MS7|*3Epm(6O7=6UzhXu&=k7YB>dn{l1+KZBAt!*G{)yqHTEj z=6#jR)bQ8{eL{}>*u9oUlC!8}jC6TUwl&Hi5uneaF^Kn>#hm>J^W&Bz(taInlVe|= zFMseu4dZz-Y%g%#3uI%7wwOUu=LoCgRKj#5!Dxam4l<7Opcb?Z{$cqKpi=_d5upLRuG|I^d`_TswpFVS)1=|*4vqH_E5 zC!gQ8p)Y^hCu{=;6FVSj#^09(zif0KY--;X`WC_u^Zk9}{{U^s{3OS;>|=EsO-IMN z*v~N%!)zbpDS~zXPqzIx9li4Lu0xkU+>G}9|4k#;7Zx_7uYPvUpU(E&jK1?nJ>|D6 zdgW8c-<#1_J~?l~JD{qUjjtQM`R`Gn?ppu7=kLM0o_-&Af92Bfd@-B;lamu&YMtZ! zU;N@1&4_uxjQ|I`+emPB0G0B5V`pz~Pro5RzwO@!3KMVaj7wplAaG^?4L$rG!J|iy zw({eTKi-LbV4j#ae*nS(5X1S9sSl@kaAO#+okDH!{R2?fUeosdR<2gYB==kRfX%RW zcvXycWQ@T*A4v6q9S`d<9`cihDU~y2B>|{!yu-!a9}f_yck~Ov4XFRFGPwxRQz-e< zH#i$tOM|W|9i5`Y_Jz$`!Fn9uex$(zH*FdMSTs~*rQ@;oyHso~i(F0@Ts~rnVxw{j zN%A3dJklkYM$8ATY&!qZ;NvX&Fc+qewJc+INM~Qx=*t0D zALjR=X;@k<8qV%_ehqKMdmYX7tm3&o*NhMJo9oj+zm*Bmj&~l~ac!)_yy2h~rox4< z(^}u7&u-HI0JaPPHQE=qnWnlvSeHEyk%qJ9e4PP}0H{)yX#mo-eI@0Hb%)badP)fE zY8wY}KR-sx*#}4aM>0*OQu8C?raUC9`Hgt#v}dZ{(aG zByY}u^DbXGfVJ7)o8ykmD0@zLeud zF7pN7_~(*AoLPW8A`LF3r$#`|{8(m^)2P01Zo-et>+>-32d^scRK8vL@D4?Rb7e!> zVY{MnjN3GvUN79zTAYo8au4Be$e9ofS0e+7d^-a|+i%zA>fHygzYqTLT^w-5fE@0` z9bxTc69>35YGWvy0dE7k`gEUHjjnV095CRU430(zG_W^GFUwug)j|2>P5^T` zk9Kq>46;kvr0dfU+rFRj&UDb9c(gFLF0Z4%-?sU|TCR*eMt-MwIGfgyjFGR2L^7iC zACLDiB3k9_I%T`K)I-5 z4h2ht02TgW8cSAXa-1z>&e;^yJn9Dlz%-JBc%)^XvRoIrl*^@*DDx8Si*HY6Q6){-WXpGuOXkjPLyGUU2I>FMj0ou>`lgUi2Kjc!A$#q z?dwqoC@#R=uef9f*F6vPCfgL0DpYx&pwWhJ15;V*$T%w{tA6 zUED_T(CkwsE|ruku9sS|d#UeV$8&wGulVLY*UHC_Yl_g7LR8tL=_#}I*fR>3wK2ic zb8D+_rpu30%y*ON;WS?U*Wq*-?r(eh;Z{W=b(u<4CSasgLx33vNbj1APGM?getAlT zcFwnxXoSGI%pkxz#~GX6`kH5%<ddN5vBr>hJodBxq2h35B`Ij4Ia47 zW2uDU)bDMiGJYFv$)Qc`1M|TA=z}QoN5B6-Ny7*8!G})HWFUC`d}A$5u6Byo+X5>0 zNrFpKn4h2lz?P&SeLvrV9>9n8^@F=Zdm9BsC9uNZSK*-4)u=6)0dJ)3TN^DwXa8S)NolW|2#FA;wkSMVbg zr=gK4t}FfM@VkVd=}&Nps1?Fs zUDIFZ)8(0GN2SovL$2;CYrh%+icw<};0IyhFVXhUAE{wLjRHJJlP>E*%O8HN3x;iG zA0nJTL_6lPKmpnz^Mz9>OZ3^0BFV!-a>xt~14V=oF2REikS>+71sdt{7~8K3ndYfH zp4^e&yZ@p5!}q^0KYsWv`RMSW+zIz(EI0?wz;xKIxk3Y#`drqBMuAcmAkVmfyl_b% zhI6SOD*m}V5W;cZg7Fw%iTI75O9iP^!d1V@Tq9@ZR~O|6nc-|EQ|9}1uKQc%*xql) z@$Gk2c5}P1_$=A=xRHJ;fjL%7V)x-*QylY!5soDp*C)?WGzxz^mu*`Z-MZv5Z@EB9 zR`*6V03s7K2+}Y>Sl{v*LiFu4&_s|w_^Z$<{&VFBbw80skgD?k1Qm7+nS2G8Jg&#` zVo}R6y7A*B+>G6KC>dmz)9=-|Rp453TuX-fnPc2}GMDmn4*y(g+#_DiU&^x=pUbo3 z&v5Js>d*BxG#ZC|vz~?kD$RK>B6Ybe8UiRw9KTvyx-54CKfrB@f43Cbx^DI3+>HTX zWdy*r_+jgp8hm*fFuZH_ZV925iReBgl6Me8|{^yTS(2 zo5+VMzF|*4mExQcU?1i^k1@ao>l`?^hd=jWHBfFLUFb%>6Hnz>Y zQt3}42*YRyph19OzPTU6A>IBa!&m&%5MZeB=*DduH2OvX8UaWv^KUX(Vvc;rkZ&`i zL{ThiQi0#Stq3_sS;iP!sEY#}Lv3G_bGknLux~4W{SCP`G*?Zmxl{tzg-%k*P&S`Ge);oj_s8}fb_x} zCBM7s27EKQ>2tN;J!1%HDM!(M-G0|E^Ehg>Rhihpj14pbtkR&OatrmCZNxd;Qa_Df z!T$S$zhB?M4 zIoda82NWDH@fg}W`Kex%4-Ep4pFG5v2kkaTeOg!+qOVMjBwqw_`fMrDJd!7S59RkC ze^375(y7 zfb#3&FlX)8kxP2IlmrY;<`T`( zPjFU1Gc$ljfiNp2pfTVEEEBXV_<_*X2W&yVE${=tGz8Qk`XP{ERB-9rjg2uNLp|`F zb&bo9OoCMB9G{%X7cah&fBzr;LjFI0_NVf1|Ki`tfBMxgkY~k-97`ti6f&^P zlqt%dMwn@d`YD}~i<)saGoVuDU>&-BF&g3sb@%pz<==Q&z5uuBd@&Rz>~aWD-45fVW2KmD%1)*0d^1S3lg#K>pme zGaS%Y*Zjyj_hSp^a>j!ut}0rcBJ*{FKof4;bk)B;j!Jx05#CrA441RK~e~9mkQ!Z6@PxCEwgv0|1G(qv_M{ z!d*@B{J0i`ueS9~XS6e&72wF_g6fJ!0JmIFRU$n<{WIt0*n{-LUS}WlL&2OCptF9M zN8}0FNCIAfplo`$h;K!$Rxgd~rkMxsZDsefINj;VK_8-dcKl#4=({KG)e(&Cg z^1=AF+{zP~Eow>U=w!KUOqEH2be3T*bABAyl>MN7=vS5fb8OGm<-S}M{|FEGF>Cs{ zpU2FRH|%E~@uM+7U7bn5kM*u)eJziCo8J7mzGfU}%6Pxd3BN3Dzr`obXymr-SQen` zC#ld*l2J1wV5G(YDutbFqpX`e*qG8kFVoxvi`0O|7kGVFr*ozW2aigBM!Az=J)@dO>z%f(Ci^5vJ{7jnv(0gyA4 zgf^8Rc1CDrfcC=6!?F<4)1y^S6>9X7nEN6r7C%Ek^PPp9;YwsfmyiMqmsf%zs zTz|5e1Gb~9%zO?Q@HWH0Z(Icj3>dH({de%U2>KT94y58@7w(F#4$Pl~70VQM;f%XVw z+f-V%-_~!3ZQIWo2K<2PdbYvqVN{U%`?zg9MAJDeYB|U&nP$0+=eZ=OnM5aZ2~QRh zE#U`g2v8$HhHEP!83nEn?sbFfZ|}me`O!z}S~FmceuU)mKcuz^xcV&tva7O&*FEM=bHAQ}U*LK5^v zT%w7~GtH_{M(_*d$d(jYMs%?aA)|by==0u%Wr84rE7<+ixvo7WDBBSPowEV>t$?HH zSoWu}j48{ESD_C_+)yB&0geeu$T-?r1o@`E8ST-h`{BMrm76O0sr08Jm0=`)RQjsY zpDJH3T;t&w?9-5dN>#W@DyFFnZ4}gqVQ;W=ziqGlOhJ!hKMGk?>ZJg51A_LUriQkhLZ722*Yc`OYG zIqoL~#)vcoaJHt+1hDfko{dpmTCX!kAItCX@EFEdvX0odqXS?s;tT<<57+Tb!0=ez zIqK#Vo$7I3%Q5`N=u=;zOMaQvY6y6lq5p>e#gZVg51hBhv`7fpI98g5z>=S+PW(P=M&`@E`St|0pxP53QD} z!+iyG-wzl;UTGX?+V^F-BTOzf(dvn8EC1Vmx)+6|y@>;r>)z?(c&=oRN&rK|75A z_JLrX{=J1%!0*C7_yZdMnt6RR2rv!Kia0trQa>LSHQ%XQGU%I*Ge!V?aCX~mLjZM? z`e2Q+soc7ATY@x_MV-sb{8XOjC-Smd z$Z@zt!Wj}SP_C7Xsz9cdC`TogM<{Rhy+MU@i*OBd8V9H@iV!Ep{&xc*t`l{DcC<3E zBa|}&Qj~X!I^gm^vk^E>WR{4GA-qXlNL}TK-+V-rJ(9I8lowqHDasC{a-T|mams(b z>CHF1wQTw7E)}NO=9(U=#OHAgr@~*4=i9ot7a~nnH)5MTB47JeB`e9gLY~_O0rsx` zw(ZwfhPfAB(g7J?De35P+x5Fnk=_v7tbP~X>;ob2Wwltsm4C)#-dwo5mrYi~IQ2Is3jC*TG}M(@>6*Bl+m=2lB)BzbD^&@R7VX zyDNt>l1auiSq{ty+cJ#-If}|D`j_<_=~L0a#5opd+ZnbOy1$GZD;f!~kFL%PpudSv z>T*Ijt_Ug9jy2^~<(w8h+*;U=u-7`IdnZdC)u#jC5ia>AS`7WTc8EMh$3>pBa zU))0-V#b{;r7HnczT%nKLG1X8fPJ1npN2k0l!;#yV<==j2#sCXrG>!152q)m1`ywWw22B z<>L2JwBd?j^_TR}{6fDUcICB_)Ve4*IbXk{wvwrw^gMG-y-XD$s+*F+Q`oct$}%Wc zf>MC{EihjFp$*Lnxz@a9%d&@HW6{ zJbfNtHJldbJf6cj{4qo0pZ~LeanzFxH8J_?zy9l^#=)R|qu;gdy#wp_`#xFtLxyGY zFeW&QfPw!iz^YLIAqs%}Bbp4g4)+iIn4GC5UeBIB_4>GU;i9MOsh*!cf99*?5!~~R zodeV%lPrYhtkzltDT0^<;FGmi2;>9h1cMvW4-Jy$2M-?D{rmUrpZ?Q-Y8NkFw9A(- zdmecQk}h@#EX!XUG+~}*=Nwlcy3OM}ob|rQ`fkp<&D$gWM7Mba3Qalzrk(Cyn|`d1 zCd9nwnfKK+lo6-9#4vKCjC?P5{KWSJi`bF)qapxz-dA(qmuKWZy5awAhM4}?@y`zc zup?3k_Bipa{WPG(Ae0QxypMi@3A7rVCLR3DV{}^v-6iq>(mx+&tdod;`8XW;)5r_U z1`}(k{kO-3bqkKIDQtQ;aG|WIhtNb*pu$ja*wZAOTTJ*aCqG_ld)fnD0_+l^}%?c!F` zx?(rfEM?sg_R>8)s9<A!*KH+=gdk0;!KH7M-kXGEY;ms4B_E-D{bFc2 z1zxJ~*!6)~^H45qT?CZLB3LUn6`RUFQJE{Kf}?@Bs9U^^=Vp^d2|4t6Pscn^_Ulaj==*2{bv$U{5Dk@CJHqJyxqNjHG z*z+0B`7dS~f3Yh-bjqZ#nHt`5cX9(%#e-xsrI=Xj!w)>r@9c7U%{s%r_3;bI} z+p>E z_gS!%J{ybY4>6vzU|IPs`+g~Zd(Gc3gEu{V#xKL+(0aX|k0n@8j=Y%h`)8khrcvV` z5NJ-h629qxLWT()mA<~d?i1K2PoCJ};h|l*a^+~SMCCF$f_dNuzVdxRlKd3>VzM0LvbN_Yo z=geIYI4$h6;`>7Y+Q=~?lnR0=iUTt$0*>5OWXI3KWDaZL!O_lw8c%aO4O7wcD(E`_ zII~`Ds5Qy0nHQRDSALOgR!n{MIp@Niw=O=h z-m#=7-nZ7W=9c(LPkf`B*{qY=w5_(HM+Ap1kgFyl^hDJSZ%Hhf2F&CZ)`K>z+wR!G z;l6P(8>*?XUSU_~~whkMU$zZltWI3a=U5&j%a z$wXV2Am{17?SOC#R^g&0+D`3;#*xcbn{q?^#&JLm*fnysa$*f(0?y>FI`mxuG6VNw zgb%R>WD3hl>7dBcbQV*ScvouG@7M)^0Gg-Dp9}L<;d+{>uK5Ok;aw26A}|g@>)4Of z_2KT}U3~Vsb2r&}#t&hO2u}*>gGpH^H)?B|Z)+&6D5n}jJ&)u*6n_}`Dt~qW_-=qk z*a5&1Kw(FK-plk|0+{tqfUsjAeCN*zG>KbHv-Qq^a8Cxb8fX-x&j|KVHk48z|&w+9rBH@ z#)l5mmR|;p$x3}h?<{nfwR$R#uH4#w7r>xs_z^&Rqp9O=ZsNlY8&vY&Xjz$dZPx5t z+F5&15umg)4mt_bDR(naw@ivvu1>pknL}493Y1BdPbi}x{PSH58iVc+a~q(9P%RKByJoj34}wu>DQo6EBae0le|3-3S}%8$pg~YpDGerD(Pit$I0$ zPG_P^avA;4)&0Ev9Nre7O{{{i7vL|8@Ep$J9M0i&K^W_@&?p?E2v0)hwYIkAi+mYF zfKjFe;xEecBE<1ql)8R)N<5(m*Z0--CaLz>50UiLV;a;=mMOA_&G|0Gy?d zusjONVHA;pFc^nfz&PH9!4PSU6I$Tl;J_X}eCTQa@WT)Nh#(XqS$e#CV1B~;hYsX3 z)?>7vM5dL#lYnPUczv3QU6VybYf%v}m5HbX^zZ6#0QY|i{vkn}tb#%4AyY+@>K|r2 zqC|6lVIq4Yyi-Z0;+iQPvP?uHxH-zNO0oX_cSrrLgo*e7$c4e_h&uvgjwhB(#0xY4 zK?&gU2VpITkd-h0Fo5%#SuM^g@H{PSZ?bO>b{^UN?FaVo;E8SLd$v~|+OUyZnTgMI z)DD_cD^d-*jFsrB%NYs)j)DjZ06*DTZ6j-Be&#*A7Px)yw%vXIT}!%6+aB)O&S>Ah zo*vla>B#o0k(HIoTjk!H%xtS@*u^Tb{$v`C460~}p#sA3HR5A`0M!7Ca6W-jh4!Re z(r#SYHLa}MZdwaL8f^rHfGYtCOHl|^hyvkOQ32rG%F8AQm+ALV0yxLg4`C?+{~+Y& zy!ENCw${&AW`n3@I)z{H&k6R5S3hROZ_E_*51+xCm-9z6q zFL)0^bQAyztqT295b9%h@A^RH;{*FBObtSLwPgPue}1WJJu%?b)P@k8Zwich|4l zmi4VI4gd{9Lw>OeE8oeNJ}#4?s!uo@h-Vxs`~y*t_=;ZyjG#Z5^G5^uF+l7FK=>cu z)prPly9B~+fl~DDiUEaKx@r+x4m3wvoDOC4XAyzdFZ8T3f=*(21sbW}3!?x#nkO+{ z3JfCTcRF-hQ|))RZKk#`%{n#{mW`H; z#5+0u2PFVPevbIzE`S|X#rCkW=fgr++0J-s2XZ?s!_hxn0^DfzEot>EZFg0M(6{16 zK?(n%4MQL70uauo;_b7MP=Tv1Qqe9v2q8I20u%wwR@h~mwOf`d@7yutyM6M)b`QpO zIGETlM*#rGN*b9epHYGvstE@C8u{ zfcS}sOb_gKHGVl|Oc%#a=l$(DtP1G|?|=M%uI(CZSN1Re<-a^4E{Lw(YTAg^rWydh z=^g5-0(s39H26Ooz44vm9&uHHj^;cLF_?MN?TVi|Y5D{#4U9ny0>%QQY{Qlt3QK4Gt@eE5Zo-M5^Q?FB?+bG4$*=p-M3kc{ z!ZTCcW4jEuBhm)keggjx0Q!i$4LXZv#Fk19;ZIZmyddmB7m%v z4=y}}=dmlKQU+5OL_%tT-s*=F_Fx7-SpA>BPW_kyL45Dl@Sb=So4dLH=qH*2=YLph z_ZKm~I~zySfej`D+a2!Nqn#)A%ddZ9fA{O3+0VcDm3{H>E88FLJ0jf4nu)cWsdyQi*tZ8yAKSINH|($eoBzVD-FwHzNol$I%~?y_^V!sL zR#S>7GLbW(hH^0I?ij7fdUaYoanu#G_|w zNtN1)^2RQKrt-G6*0l}4G`MNqmfTbZ$qb>}Oy8&+GFDl$Gl04X0$dm7Hc$c-DzhLM z|@>IcE8|ALUTn2lt@)8r=f%YkPo0VeuZ@2jx#+P^`NDmVPGGX#NtiEL0N7YK6< zP%wEWOxYv))v$D8@Pr zrKi9@f?d)eT2cSxLV6;klt>F?gh~8*;MG~^$2Te7c{gu3HI@Zo#&^-5%vvEp8p8A3 zJ2&h1Y731-e8v%8D@W+udmGXg%QKX3OgG^We?w!HMG(gZX91URvr?IKP`ANU-70S4 zZ#P7D!giHeYm(Udv}?CFZ`%*=eQH1c;79hSmp`&Ay$##SPy{GVqL-<7DXXBNKNK6j zf6-1syqfTo)*K|2^+7oY*4@^3E%uvSU`9)wX82i15@fovhbi6LY4iKfH zrdPtkOcVHfpix&`)toDQpNXzj4t2PA!&Iu=?)8kRM^7te?I-%JtgG^3^}fceDaQbX z9RUNigTtJXO2y+FHWE1v%ZA)%HWc!VzoGS1iuL#UmX-KZXo_~DNQ$7bB4+)k&lImw zTG){U7V1B^2O<&uaxHNx8cs#O4Od2reppx|KAvfuO<9V_Rpk0kjAJ6)oviszvP->9 zd*|YHyVkoPnp3}^cdpD)A5*22LueDeqfcp3DixooqBW5FDnQ;;{`?fL*H3L8^)yHB z5kvh^kNt`2x@|T{CiZl)XI~#awda$4(YyG1NBO97FApyl}t7X z)8Wjnt=+JD7vHnqROL~$l((jMtLQdWIS8k8tn{fWt8|*F>_wNtGMkWzHx`!hpH=6d z%fQ>pD}_Km%h22W3B-Nb{Bc!Sn*SyBv+R4uA*;Z2MTOi{ZE+DqzIhe|MeU1l^aZb& z#0a9>Z<~vcVOkddA3MDM@>x87dexxOM{RpO;KS+#u(W}-(oBnl|pye zp(*HSXJ_XROBujLjF98YqUI9|VOjoHtFxcwzs$Kop;``?|=XMc1ih+>7R=0!~6i; zpv`6)CLF84TdxdYRh|4|pH~Ek5;=oRm75$}Gr%~E1Z zCZ$mPfg^&7(o)e)=6?013+QB3e*AbS1Qf~-ud;eDNnSjo;o*cmn86QL|L3n)RR(ae zuluOo=Mnd1ShjL|zW3ZdfAD2c1pMl!_P_n?KiS`Z@k{&q={L4NI(Y5RMZrjGSi+<$L<=fZn+U*;bv@?7B z^`5y1PvzgLX0|4Nu%5N7jbKV)airoz0Z$Y`sURs2F58u}XLAZ+tpKqcUmJ)9Q_i9$ z9m*G^)>ND6x7yZkx9rM=E!*g;OuDIcDRYfCnkrKi0WEJ!BbAa$%IR5c5n-sf8iKP~ zBM4dj_!JkUBGeCv&{RIGm=5({eM2qaS1(xGYgci0`^x?-f1*xg=#WkovQK z1D)6Qu#14W!}m<|;W?f*m2HTFxWVupg30jybW9rc_oO*u{Y<)8^?&TYwkzIX58rx2 zu7y8GCPEPWWCP_#Jj#^;sz(?4(c6T+I$kmx!+~DIF*D(wiFkJVSwQ|5K}+Kt=!Bgl z^9lh)CYnO%Djr{HyijD;uex@vd(A$+`Jw&!M?bM2zx%1(wsl)eTjIkCg38u-!jF_n z6;`G(6g!IM6#+I-$jb9{tahCHom);_&|Iw$;Fuup4LDl$kMLi#%Ps=w7=@M#`sFf7 zM{=Wl_%Aorrys@Q^d)!d7dNLP6a^4QC|mE_L^FXNDBu904?D(_JR&}0j>^{2&Vo{X zN3b*2f;K|`2c3Am*MhHkfpV$#cNB-v(;`3Nzv$YZDclgJlaioOe^XdbVbJPjSNNrH zs4TM5{y?-dn9N)W0FIUITz)6`Q_o$AjwZ>P>bqHE5VKdbJMyD^DDf1O>PqyfGUXEJ zREP-{vq9iVsrm--X;=P>hMks`&Q>#%odkQTy*+ae$b@?n6#m#QSu1JVm9>j@_mcXB z?gign;Y#F+DLpJQ7&pgt;4h1S+7&6T!%rgrI}MlB-?=j2Tp6$my#DeD^S9Rp z8l}{>*8_C3i(qN}oYH=N7g!el^XJc901F>NX4Pt`Z_F6`hOt?<*RI_IBD9@H+@j24 zo);1?$l{_!ur&Yb-xtBE<+tqnH~sxGc+Ark|c>f4Tv2#U|V!@nB5 zx@5Vupy&)vxTQpZ&~!`Q@+do97Q~SPaaX zs!t7OTnR8$eX4Fb9;m63ZK`g$1edE9-@Es&ZEbDX-~7$r*#G>m|CK#?{=_a{zid}; zT(!-Q?^?dmwyzJK+Lzzlx7{aCEFDg)mCvj{E^Tcxvu?pLLDWgC1Mz279`*3HLz4?B z)i#`8R6%joZiX{4FR08m*38y=W}OzhY{D_@&}If*A{ZBuA~+MLQmI3*vOC+Mtb)KD zJQkS7pZJ*mhogTGq9R-k0#n~5P`?ZBgIyfaSV@l}z!d{R`WO03;&4#9BJYde#Ag@I zV$Qh*0liWRVs{~Xv@1_Z5PHY<9)#@2-<4{&U{nO?)e8{93gMB&@a=K<%P{tzm=TZS zlwDqq@hBe=^>0Rv&T$-sA1(mFUC0qS$w*k6jj@m;M-)&a9OD!P+W^8y%7Z?fRp;}( z@HAWo;g}Q7e2=Jf%+%n790OC0$2J=m)|qB@ZSAssc>O*5!Of5D{R?;PW_HakB^}#P zi{~QVmdchp4jSzE>7+Jk&1{&BZ6F+TiM0#y75;Q2zA?0vqrnjLvlGBq{wqG2e&Mft zySw}cg#h1ji7+Pb<=@{2B%HWo#g$raLZ{GraPvBiW{oGyEB0&Nx2cT1j7|_$q+QTy z0VRMi&g%4f8M`SA==L2=ynTt5F#g0Q=&Zhk0d( z#Z+#o+Yj>64kj{HtphPmaaSv|u2osj3h|#RY1=gIh%DQ_L!eX}WJgXMAG6a4MWgRX z;^?0Wb1a@b7C*|ZnJUDzv{sXy08^RbYngbI`Ul@-LOrNqj4LiA7Zs>%pfr@bS+-`W z(qT%|Y}OP9qQ~Iw1&&kV@?PZ=#ez>5XcH_xK-qxuOzC>f5ZjH3UKA<;R2+KJ-hsMw3Vp0ZS z0vGIZkuZ#eckx^@ASwvnbRZw>aCq?GfeVn>5%BK2?^?IrttX!$uW{f<{sG?Q6V5vQ z!-n~RZ^U_b0HJ>b+=58%*bicuXh#tc-)TB}=31(H1d&X_y%NXI zZ!_$V_U)^OU)fK8`BVG#m%p|>J-0VHcH`bH`|#6`Z0p)ZYjhHOyz|8V{x?6jzx(;$ z+Gq0jboZ%^%8{?^W3?h&(^WH+8)^X+PE-!`IJ;2;v!DI+@9f|Fn}1{f@jw1Y+dnw4 zH4XGW{D*&Py<1o8$-%Du>hoXQ*I(VY@$)^iQEnX+0cAMKq$M6k{SY6EDf|-LKY;RQ zP)d7Xg&O@3bcfseT4oowl=n7*wV(um=r}%uV^74?g+V|Z0E!Gs0aswv2$$mL?YK5o zdhRy}=YybM|Gl4xf>ivuu%9>He*}NwxRoH_!*2*9v=eVKUjK^0{gWo_@Q``?aaw}# zJj6{fNAFd+m~k-AaX%3}owe}a?*{&p^Umgzisu z7j^^i&5LmcWk$V{NqGnt$Q}y-gAzc9QlL=;RM~_(AEp|YX!6oJKC?cSZzwmlw7PuG z!eyWw3X6bVpOlSI?wk{!2-|69S2i!%M|a-0pM3md`}E!K+qM2xORLoSv()eOU^kVq zl3Y+GtoWYTKw*xO!p3Q7V|D-t{oM4~#FA?40%cc7$shj_5yvB{{HUNAyHJj44S&!L zrVII1M*N({k7yC3o&$YF`V4iCpHMeElfOtOu|8tC#qtic62Jd#q>hgvgyG>N;od0( z>LBOeLod**e^>RMHi-+7#l4 z1YZn#oP?@~UCE_;;c7OdHB?quwDvCoTwg1gL*hc{Zk+T&oPTDR=1v#XwVa z&`K(6XO(rD;#Znqw`GcKRfhD?sx5t&m!buY!`U%Cso*P$52aSKt9H>={Uv^Z@I>)J z4ZaYg<|hGzLO@n;8?FqHKgxVHTn+s4WRxYM!#WEWN*}p3~I!cTz;vr z+JZ6^>mG>aIh@0H0jKeh-v!U%9M0h!UKjYO9vX`=c0vh&ylyla9nF;td@U=KjJBM>v1xuv{3iqEred>(i?(LuqK!XTl zn4fUJEy@7W4Fe=k7cXA)OM^GoHZ++Elg>ENhzQ_Lo+*<*MwlPuMnwQ_(^?o6pXUM5 za|HKWPnLm`eu2~6{*YjvrXpRv==R%!i_dlf(|$ow5u%fzb|W@BO>>y-z>3n|E&7`sSJqi;+Ei{J{O) ze{kP+_jhbO;oNWWpt}52d_vkqC_Bm!p0v?lvsTu0p%??VufP7<`R|p>m+j{5O-ERRCtt`D+pp-(6C&O;|_vTAlgsE@P6Knbj-ng9Kr~{ zu3#;{{N^YLLGD*?c0m#M5_kLh;R zShPFxOwA(n4}wJJF166m6#{y0ci8?MRx^c#v$b~Lu3o%k@85aPK6(FpcK6C1+i0)bY^?lg9Kn4n)1nj>mKPdpm17$eLpz)t zx?-T@s27D*DqjfjIi?3eE&}F2XHa3ZlkZrMq{l`5Zbz_;%D@#%3Xk#yI8&m5i(^I=_}G&MA{~PBW<0AKrHL{9ql(@^GE>@X=XmG`ES9~Ao@EE z_$H{aS>Q7Dqj$!_Nm2PxJm_W;rGta&x!FbzJ82NDM6k~h*vPHeEpX?~b^GL#oAzga_MY&4 z;fKQS*-w7*iSP%)A3CyofbZBzz{wdX5}11u4r8)&IEPiB@z4L+zc}h8^Twh5^ z(O{0jKf>7U-EH6A!l3pX&W5V7_{^?X-C&vYAV`N{F!|Zs-1LbY%;VX!XSTJqRZnKZ zq;7tIM141zysrTB`HNxC$8q`cW!u}^bEO3W0apK$X41!*RUEx>@7_K8^wUr6?%lgi zb8%8ieqeg5z|!)s&peNV$9V)u2Qcq8Z+}4;ujwVg>iZZg6UR8=bwBzHGk(WPGJp#v zeRZu&pI8dKoltYNfGV#hX8_BDmau0D6aC|rt-EdUJrxClUpDwV zs;qFsju3c0i}T5)er_D#rh1X5aXJ$}odq+QS&ydu3R$3@@1B4q(<3d)!DrXM4LJf2Du5-^Pq15`O#pqqD$eS5`c{`R|YX zTG;A{n}>VCPM#ORuk2^`fBC=tU+rK2zyBXrsxGg*d&91OaL0b~U;Ksr<$w8)?Xd<^ zw5z}S-+yM0?mx0#+Or40d0_bsRdlqx<%+{-6KKg@pg~fB5h0NB{kQZFXtP?AFwt|9}2B`+xmU|Fi9U`N-~UU9(T_ zd}x<9uZS*GwrhPGul4M3y<<;%i9Ha(KglZF)vE~?Fdkg8qMh2XpV_dN+F0(Tcy((~ z*v6o;8&%sbjHkYO85%njyV~uV?Ffgm-`-nXKFiuqKU=)jblLZ1n{&3+w%{vcj^3Es z<$llJzj58JUs4^4eREti4F@iWP>Ej*5oP8DesX~TU0{_H>&jlXm?Njch@LzN8u!3LtEKoqtY?8BmH>{H8`!SbxCu-I81*7n4&Ri$1LQFWHu#!jPD#gkDEeHw` zbn-3k@dB`z9?~Gg?J5w(L*c395I~Zr`klX*dov052LYJ#2$0Tb2Ts~2i5Qq59{B=S za?=I<3SWITjh3`}lJpJ2{1{Hs-Z*NjvE4=lLORces(s+XT74~4yndc|ZCCzDQFxD! zz}uWT%kD-dT2UE$IVDZ&WIf9o9nqcYWSH4ITX*bF-~WmI#fN`k?_GG;uCy=P#parI z_3dn8w$Lwf%2gQ+Jj+=4Rn?V1nYqD8B4rQuxVx>Q3;N41~o>>`28D#1^{HQu1_E1N-KT`Uk zSFj}-%iNrCY>kS9BXfw)cf_!JgSb9hQz_iuYJGqMI6%)~^Xk6Wj=v1Yxeu%Lo zKpK73xY}wer<8tG4;P1bsVem^`cC;B&2l@K4Q*HzYPl+dcE<*4OC0ZWSTtw2FJ53H*(oVdM>l8GH;rR}r|+s`ykP|EL)5A}|AuRJIpE^sG5`ma(@ zdZ3eb4TNXGG%WZD{grqSrk>PtL;DdggOBj6maTXE4}O95!^_s)>|3rZely;& zFAtyEm!oa_YVgdyKG?RMVq{6TZLN+v9EDTlrC$=?RC%Ds zGSE<9AwcJgpj<8bZw-;B&m+LD$CUu(>Ix8#T0AR#%YY-VR)TnE))}yjemNp-5iFbk zR(1P7x=&8oKH??3;EYq=>j}Q%?`pq5rGDdef{zW~Vpw+PS!Ugw7J_!?98nQlQXY4fSeE46w%&e@?2dbePqH>a*ZgmtVi535u^w;(XWKE1MPb#LE#w zXcMXUNK~<&BLhP~vkJuUUI=pziJy0*1$rWlC@G#idE!isOM-9Ry5&b6p}3fze9oIM z3(LP>Tz{l}5on5B+m7v+F;>mR>*x3`Kzxn^G~AiIhk;uBMxB7_Eo4D$Qx*>|IE3$} zVK9ojo5G{;^bGxx|VP97Nk0uZ8XTSJ+`|`op*4tXMcfa?(z4!5l_TeYrvpetI zvs<@s+nqait=H|VPBWXSd>?%Ez@9&S?)}^kdKXn>Dj$Sx2vg)og=RC=D;+IV(CuiT zH5sc@J+xlGWjAhIwae@4NY7M&V;kRpV8bWdUavR$n|7_cWj)kBs?VmvBnt?G^J!^0 zja=p5X|`-#@oyA8FABtj;XLX>ahIx>nf27Tz!slSwemMn^70yaUe`c%8N~8D4V$9x zMX;>=3xxO_Um`lErF5H_ZFW1h(d}8gskWrg1BDTexLqwc4J%To`UYXNGN`=F5FR!P z^K;ZSO)jw`bWOqqtQ@6+d$@cR&RN-@7G}GkPXOmT=6{47o}G89Z8-A2_CJ~xDu?40 z_{V4d*LKkX&+$^ItdhPwb}qH|~wdr$tlXT&S=1#~nBbhv9Wzo)k4q#lxVE;SGU4 zLkNsPlrF`~m$IoWuh@*^bTsKeuUshnTzMNXDHb0~I$i&6tbC2spK&h$3bfG}UR z+A43=sruxx(wdj#Rhd#bG+6Y50swx=GxVymYt_P#s#N`I^550_3(E7BCg)wbbHQ~+ zI-m%pWumgr^=X0fMCsfrp?~s3s)1l0JyCh&*(*`5G5@g`W+8qr0kunhDkc3$BR|p^ zp2M5EwB#4)RqK{CQ%}#JLIsOLr?TCAXxqbmJt^%OM@H33V$tlp1iPD@-l^)UQROPV<=4s-U0PSIpwob!E z;Iy>@L`COWuq^)HmoV~VnZ$IhDodXiOuY>F*ivv-`j$bmtOAz8YU3w(<04qrf6nUm zA7hE-aTKd~9>DXFpV|bxzj%${Z0#+ESl(|cylVdWy6I=t{GGf2obdzy-LA@IZavam zdy;D`<3}eV8^}Ums{ZTN28;A6+uz@_y}ey4%fc>P*s}NDd)Ges}QLBL4BII#jqTe@Oz zeA-|oh94m+0!Ujt3yn0Ao*)1C$F2;xdiAPnIQfo#8gn$c(WaT|cb{-)w2$iq|H>QZ#L)idm=KYzU`w_F3=_tmJGQqzG zscZk!KLQuL>B<0rIyegv+6OmLM4l6gh zq7w~{RDR)X`1cK z1~z`QZHEt@*#4tuw)^O@ZOiY@)8{tQfYDT+JyF?4BeC^r!&1dpR;3k+qflHNX`!y$ zx+=Ifw5jw_TTJ|+F%$vp$e~>O#p3b-VtJm1T$H>BmX-f3RXJ6pcV_)|+b(Uc+vUv- z*;B-mGzFzxVK{RO!hTl-AgmKDX48Gqr8rVjiI;%EPgtcr5qHY1YzXx&m#`wJMJVfh zPW)|zBJQ=vWzm&_5huQ@L4{_z&)3bv$t$ z(^qk4B)d{oB|kLR>&&7W(~| z{^%Y}!kdSa_0RY(t`c@P7ZiqPk5|FOczH&sh(Gu#`9_^{8sG;w8UIO`AtYo%B0j`Q zW&qP!mLg|z<;o@(pwlMR7G03e0*A^5ethDZ#u)3WtA>pR?6hjx&CBoD2e&`8KmGns z?ERbX+3kz(*g87`rY*lLxJme>=(EMj{y=k_@gG+82bx1MkWWXVQ|OLo{P@+ePLI%U zo(|*=g|VU=MFDh*2o)ODSLHA$u^bh4orj8iDE&=V=_@Tq_3w3$i9gYao?Wan8B`Wc*aAX zy?iJaAe!}LKD684T^Z1ytt*p>>dmjdwo>IYPN%jz8rai=U6F&r$-HaGiREz=t4{*L^O2w01kRNKtHBXJenVjy{jCabzcPUT$CY^8TEs)JijRzk ztn$yj-|J`&$XJ2}9g{q_{Rh8vfj#m!j+6xv*psf2=I{tySrE%f81aM*7R2%%9yMjm zslmrt$T2~DgS-quE)eB?#FO?fiis39*x$87;bbyao6?w3X>GS#mNpr;C@1QtC@Scc zxrm=2p|CU>@-WYWW##*}zh4HgI{cad&xBRuXMA$54ER04>sAIF92|P(vO}PwNeD~; zCPJmdq@o}mV!$7DOqwFI;pmiA0D2+3h`{{w#>U1G;cN1D621?-CQdLFXYC&TdBZLXujYwe88_^ruo~@KcU)R`R5-daU>Fnvt#M)b_O49_BTcX;e!g`} z728rGdTQr=P15^m-&4X_?CcoeqFXf}`3QL@yN;<{d)t)(Wp848`+GJ} z-dp{Swb#4W+gP(p*RI;-8&~aMaOi^mG|?bV{3X*5I|9eacw*oD-QTMaGP`*BvTbZ` zdAiD6Z9EwDub*4~;IWM#JhSc3@7vxt4{h(^6FYqR+$OvGuKd}WrFN+heHAUsCWy>5E!4!6 z73NeML$p+lm%8>HE2=k+h$vK#92cZ!Pf=QjQQZo#sxlz!Xuu(U(^6So*y!1fOBd|Y zW?~&>U@B6i{FGw(MCcrZrtlnu{uFX!wkO(DVe5ICAm~LHTUe=a2?E+;%5gy)w-OZt z2xNnB6(Q_lf-qO~EkumyW^E4wczB{>RT@j|LO)8#c_h1f$X^)u_`4DzrO=N8ih_BS zgV0ScjzF715CpA?2g^o(iUJ@g5`^;n0`FFRVvouI>``Gr+@5ygQI`;&6*}V!)qnIK z6#<|#n^_p6`LiI}BN7fU-?pL&B8-c6!VB*~g%tWYB{1!2Y{TR$GZtBEx@Ole-m>q1_(S{Q z2S2ip-}#>1+PY#UDX%I(}^5y+I*&Z3POHY0tkc9o+E*Bn@k73Lm<9m zhYI(SK%>y{B-!^gxgtRBKDiUEiVB3H-zrzpVTaz8{u*iT2&_4#@u==aH*TlTce+y| zRScAT+zo&U)Usib1{c60oM#sRV}V$X)FSN*R2?fUO$G3!FiKa_$)_tH^nv^5TfgYK zp@~D%lD(yJKwvAM;+YlWGZa9w`(?f2QlqkCc|$o>`=2OK_Bo6c=SZ}kE5_YnZo>kl z2y{=3^uMesZ(CFS*F^ne*!|%N5Ry)BHAik@d5+j|5B>vYYAobY58*rUQ1V9K4|K%) zIs2c!FwqNmx{n1^j*g-kj&kHEfE-1D_$fyRxbUAc$hvNFOpuq0@=ZJ7h$GC*=jUn% zN(Z~6*4k~map96(-?(5Gl*f#n0SX^tt6Uj?B0#1q1I#v1@Q0)-d!EVg!>&Jf^2!XJ zT$#^{`gvt#fNl7F41uCWbL!s;G3}kvz_t$#kUaRV4;6xc$4;^)3y{*Lr6>c+^&@4# zt+jXTLUz#_WBHvXmbFq*xxNHMS!105c+_ZhjV4XY5{or5S*31WpJ(x_&pKO z8Q|>fErwX$Zz?RKzg6MwR|ZglgaL|g;E2t`WlYAHbLMge77^eh>;lyIP-D|__kqi< zu3Wj|h`f!{IgoXI@x>P|_-7F;vN#V%eP>?c^(P@!bZ8kQAJ>X z!=t~Acu*^aV6+jU zJu+W_dI`_*U4ZyptgH-R@~<)zYv=nQwPplD61<9ZWJMn6sN1oQ!rp)Qz@B{drR_g?Y~801t$mo=`lztAp-^?& zlew0+fs*5g$~hydIsK zs5qudOQp#xcRo<2lu!$XumI+1{WOH`7r|2g*--jLfAk|;{hnRg?ASUaK{<|w;_bAH zAOPi%b_Aq;KY;TclpuS`kLVXgfv`*pxsDxKot<+>fGY-a7s8?xKoNi)-Zsqk5n(Aj z_#Wy3o`M}WgmmsAlU3P%L`y{d3fhCRNWbI4{HO$|cLaoYlmn=8uicJ;@>9LU?`wfB z&rIWA;NA7N^U45Zu>j8@9=W?oxOIOT<96gd=?LG=D+7o(_Mh`^5l+@Uw1L7UaM2J~ zjMqW&hFt=YhA@xm33nCKLO7Y8-@++cBlunp^3Tl`dfQ{>lGp4v(q%797sP(dR2 zhqgwd5snEOiRMIiqQS{5+#vuh2897Aej_{S7$>4%g#StlwC%eB6draEnnnrcLMOK? zU!plLJ!r2|I0*hh>PqNkrhMwP3ky+TQ{LX!5sbd2>;fQ-MsY*gp$w28xAUGbf~k&1 zVKEhysX$yTPyBix>l|*N9z_wb0=}(&qOGAECe7<>r04esQe8r(wLMN%o;?Pb4-jWQt!;XIu*0v9#G0@9L{q zG&ZHDMH!$x`*A@E$rG)Pzp3=Idr*nccMaPR4}9nH6}!>9AiC?R%17R3CyI-aT$xmU zpU{L)l$Leh8KBH7P2?8FuK&TVga%3x*7^3G0{%{hf47=4pi^~KKcXUq?+Y4KXNBU} zFUNL}kCat8s-6HJAL-f0{7sE7^xT_M2E4OzC+rO1EIZ#Bps-Mmt)L8uyyjIQ!syf7 zBQ67IcokSCi(Zz7b7ep<&r07iI9CSzo(Sj+aJKdqLoDw%6_(N8s_?ce1HAo(KLNch z;RO?9w_mr@vR+ps#;Hbxqk)w4>`JYX5F6V zkMh&hypC1+tu_jD7Hwz@pt-S}VQRjMiGtzTlc&~dHtgor z%Xag|mTj(YDrU`v4-RZw>FM@*iXjO8kz=r%lZ6~&49av<^Z&)=x2$~M_V>%+RfjKP zs4b_%s`2|6`&=3D`+?W34A@xjtAa}xw8tZX&^RK<0@<1rgcN~^U?)xZb0I#HtrZ{= z89=y^iN!d7_OqXP8gSz>;rHKv-**FCzkb~n0rUPb34`!RAGm7yE&qOT{l&bU1!1xl zAlgGW5`eZIp5wa!@wupiFg{F9ao10t!gt?B84${dCj?;Oy~?o;C-{EPi#4M-Q zEGtd2!tnwebI@|3hSEm+5WS%7FN@r!8mP1zT|YXAI|NErALu=0;X5GsM(IQW5b_i3 z_7j_-}p{~{^o}II}P3xCMQC6Q4yLLkZ!*#X6O+N~%VOz3qO;fv|Q2N3(#j~EI)|1&5KTOBDCHn(w z?C#s_$um1R)Nph#@SO)7Kg7U}E`>HsyuQL!e<%Vd$6$tfrR|`AS_H8i&w^Ez0khda zi4xr^o$DI>uCo(ObT`e}sd8Z57U3hzWd*G0lN|t<2uqR1+Me7|1js!JM*%S=LHLiL zI%j3JugVUBR+Is8Wj5m1QF`cUgiAVql*uzDEAxHDE~d)U1@yxCodJk#!;w6(&!Qhv zma4!%LrDkz>%w^X4fYTZ@A%%21ycQnodm?rD+c~vjUjFIxAV#X#Il6psJ4ik57Zq6 zRJ!aQH{aBP-r!HKr_K5~I7ItAMu_bSUKs6MP#WIFbku#W$0xq1_Tt|(5ITf!g77$` zqjdY(FdzSEFe}ABkZ5^)f#&H5L%&o8ex^E#N5J@{=x$fr(Enn3L6b8*RjFNEzhWQU z`Pe>v|A+SOjSuZ=?~-k#Yu2-lwG>A(npjiy+DpU-6d$X;#@W}Z8-)F1(FK=NLw8&f z%v}K^Q5ic^Pypx|g_O|!Bm5W5=Gl%?rFzE?N&plFqEDx9r%;6T&^JmA6i`8tfr0?D z(xec&gXnz4drdH~Y1bdr^%NBWz)^|EvUR!<>T{}7weGJ}qWYE^MG?oew^l~z6JI^A zA1lQ8xsZFtVP8!pLF0aFDX;7d$kgImDrfOg*>fQR{K+hJ{N^yXfg&4M z*)1*(hR4(Yio$iT+<2%@BC@IG5}zJ5=08jUX|`N;C& z(3@1R)v|UovkM)Kdj^NLv$Jj6+Z^e0pmB{xKN^2D^*#vv6_&mUyA_!SFjqjJkB~Nu z9nM0=NMMxP;f635xf^D}k&OF0wzK_I<6xz=-?g=V-^Wb{N^7Uv@jjefZr3mZe;+>1Ys8pgZiV=sW$|okzsI) zIqzU7QRvPyuz-9c8skuQKG+N1kAULCiD6K8T3T1VEtmhI0O*YL zJSZId!uH7%S1sO2^2iwXy<{T!(h(Kq;{KsAMC*lez5w# z@cK0?1Bz5--Rb$6#!q*j+m{c&v5Cs(oqMZ4bhC;#U3Zn^-4q z&O-YO;T_|=TLi*{9_DExC<7u5)M-$BLHW?|vBR+qUw;z4@WBc%(@7cBW ztJY8YwvlwLZ!K$<;xt9&cW|^du|qjkPKGvWf2|mTvdPUPC<3PJ3`p3alGk>W1bPqc zLBD=<5Uad*R9yO&oeLtc*0?fnEr#)H=tbQ0~d_)E%-Z=eIp70`E-pU0vSWm3qh_eN8>0Xf6J ztsJ(Mla`Ij%hu{$0-5r7icXxMfw5Q+i&fJ=ssi~>zpU`#s^mF!F`-_wVhZr#7hCf+9 ziR2b~T(LV3$TkkKSLl%4P;32uX>&N+_gzrp2<>>?>tqSRi(-xH zA!w|WZt(qXKa|{8UqkYP=F}U}JSa{zDd?{3)1puy|F5y6WQm`X$|e{~Muu&F1S-AEhMOh2dk`-s$;07U6u+1Ji) z)C|$(k1+LrU#C6(AL}$H^eoGRd_BAcBa;3vjxBQ=v0*c_q7Z+s(oFm6=l3ff_spkZ zmd~k#%YqztBzS zR(<2yaZWhx?K;_XmesA#UFWNXTG#i2dM}YDYywEv4cNN>y)u)HzFYQJ+=~708Qo{Z zbH}rSS_k$@=w=xiD+>qipPB1!uecQkl?$WXPa?)0)7LS4DvqS}gC{g21E`Gy z!chTG@0u!zfMO;A1~y1ZOxkKtc1TWVWaDR?VWZ{l;8f!KTjgHvaaJ2R654okS6;nr zZ1=~PBvQ#Rp()=-^;92Sf}J!2_Kc9i8!4jP7p5LW>rdfPbM`N(}8% zuT0kE9FFE1s6YFPXpysV5oWY_$Bt3(GoF$)*-Hh^`p*rn-rsXTqX|M46GQ*-{_oS7 zkBH>_c}Y!?!}sB$d^6B%J6hX(*lDl?&?dT7>&-dk)4bat7F3@Z{dUhz_H80R+ z8r{R5)}X1eGG5vK^sI!zM5T z`C`;IdXia74H~ydn?$A!1}$|d(hu4)K1@T~N|UT{jfxIC^;ZRZ-$X^GS>fcy+Ifk? zN@m^5NuA&BOa}1{bzcM}#UV<5QU+0}uPkDQGFn30Q=}bRw^e;GF@UPMW<6Vr?k-nh zcYU}UYZ|tvIC+jNuB>aklprFf%w39+B$5Bw^n*~$g@4wSJsi_B=@VdRST%AOsUaKC zFxQD=5NYUD>Z#Rudz^6oL*Eqw;baYb+icu7{po~dhysqc19Kt^C>e`u5vl){rf_ya zzoPuq2;FDaa^t6VCO1-RTS$H`Z`$wh6Bk1uzTK}MzB%p@mm(x@l91~`y`^$H&LJI+ zH0fd!1U{R3z_1Bo9&ZL^{Ekc zNpQb2hyH3_ypugZnh665iJM9aE5X#k@e|vt-n*{?w~bO?52E!~J1odH-i88zyQNRv zo!hOty4?00`mOO^s=c%IxszzdwtMq-DNC5M(|=6mf1}xL_~WN2F+W5cwMpQVK>WQ5 z%13Zo3x!j*X`cZgfN1{duWG-Lozi!SO+t4&7Z8oEgd&H4S&C3v1p2sOC06CDAeY1T zq6-X<#;-&w)Z3q=f%OV6a-6tl^!dr%edjU?#7X;Zm6o9$H;GOJ4%HA=E-*^E*Jc$% z(W}Hd%V^Y5aTSx{^9w9cq!lbg!AKlKIkv$cj%il zknMdspC4ZgsY?h!%HX2WL=qIex>!UPXZ|a&c%lnH87)Q4M{c>o|BtSAi+XXJ@*$$4 zup#u`7pS0dWpoLG(fx1a#`TiFnCqVn0ljf;MV2yU=hZTrZUX zVr)UJ@Z(FWeg7@d6-nAy1)<}PRd=EkL6k;t{#Ku@zC1Jd>M6A@p_bINfKNxPKdG{QR{D?#Rq0P~CcPP>={6K7jjpaU$K! zX0o`4AK=AI3e~&I?+lG9!}F!Al2^HRyOFdLNe96MCw9P?8)9E*1geb!I_9oz-pSv8 zGZpTyiGOU7GnR1AE^5SdZ+-5b7?}HU$2Qn)SeJ8lu)2D?SZ#5k03FDYv@$>@*0=wb zH)fO6hnN_Dwh!z@F>nVGsx79?8!rM0^4@1@q5l#KuZ;oUcVe4d)zGLvt-KBr22NT! z1MFa+H!_~*>&)1l3sIaBs8tumG3Fl{+Q9U|N|H#Q0Mfr6R%xP_jZJi&iGbc~?i|Nx z5vAG`_)#SFtUjYDz$kvmI;^L~O3e@2`~<+~N&@WO zMq?X4#Zd(3KKIc)L5ds%z=-i!ojg1cH=2d4Ix;hohC3X24EIV{##gq>9;()p^C9j2?kS$UeB zo4T*jLc?L5lUAT!BrqP*W`qPcKgd_K990fjHaj6BGP0W<1j*l$jZ5+T!|t7n(MF1C zGFE43j>g$zAFi`of>O;kuh4zb&wgaGtwcFFN!5TO;usdsjTb50M4B(8}i#jBc*;YN6R>gB6?ahlwo-Xa*>hC!t>;E^I zdwspul6Y8{USn9_Tn#QC8+rPSAk&GOlh3?z@AyuDYXAogLn8CJUz%`<2LOek4l!(Z z-^Tm9JPV%NB>DnR>fKwJ>3<1kgUNrvmv`=`i^}ab-^$5LmtI@{MMwtKcCFd-pdVv# z9qgzusXVJ;&2<>#g|MS5o5a6q9LfL_Xd=NYa|Ux?_Yly|GpGCs!y50N1bb1Q~7 zqiZ}qK7y&oNb5FvJb@h-Sj~#C3MCK1z4kccaUg1QW#;vVx{WCENpZ0(4^3_>?50nx zl{r=S?_?J-3ytb^GQM#B7VZS~D_3TlN_bMuvi{2J_#Ul=f*N|EV{iWt*koX3b=bH3m*fFbxTJu$I(Xu~@w|(x9bHo{ey0|h*b&=cP zF)y0426e7bQ(;lC)#TNR?{$|W;H5urjpjPQMAHYaTHl)ePa^kR?xT52O0V25w|F+) zc(F|}Pk5SH>fwi^jGDD7HWV$ykD?1HI>HT{M1E8kJq%BHAncNiE}Q8nM5ikC_Y5J` zHO!PkVx=F2)+aMzYxFA(CU>RM`D;j{Z8+_6vtOql=nhB>zD|pN3-dt@L%T-_FyR$d z%Ks#WO?@rMJb_YE`pgtvI1jSF<$pzNLt7u7Kcb3n&zltYMJd`^s%S%gEEu6K_SWjaVOR zgkTp98D{w+EvKwj2;Zp`n><4b zd^B#)9ujXrsB(I*A#*KI602FYxiszdIEO~@V&|3voJU#JXf-{zk=(SHIQ_wO?U%#1 zD|#RAh3_u$<{Hux-XAC~2J+hoIH2cm+A(tqeIHDy`vZwC>B0PO^n=k{IKoFGgEp1 z{I-Y|z_f{}DGy@jVfxpL?7_W~2_6i%`E~OI?I|OD4IB=pqxbWY=v75RZ_}UyvCaVd z`JVTGcuza$wN=AG$=G)U~tC%OKxn1oXc~l%*l-cP# ziRno^(q@uzkC9g-{ca>D`_3#XXZYaC-j$58FN6#^pcPu`kLSGl%+?M5mvfyCmD&QK z5tqlFUjw2|fiz=B)1pi~ibSXw^Xpx2t)Z64@fg+oN`iuB=jph7PfWC7-L_@enns9u zJH$g<1nk*m5HTdF()lb-bxT$ZY7k|eW`;_Ewi}i-{xX5NldUodJFv?Pg+I~t6D$i( z4(u^+21r6~c6rZ(aj;`NXjkHy$I9gpj4M<)>ZqhAI-2pIhRDcYA$}_8T@h(kc()30 zp&|mE`Qn!&mxc9zZ@ZSnf8OWPY&hwIRmNB1}%ERb@a4N^O80>mFA@h3(4X zgOT6zrNc#-IvqmX&Q+Vtdynh~Mb@4J{18Nu|JH4xjK5E9!h4Nj{1P4KUt@f}0A5$YQr znfx%-;ym1D;($FO7N6Zf#Asc%3^ez*^+9T~a;Ss07y?~XjUe+&^iQbkA|deC+W(6K zo)4C;>g!VHo~O@th5}=Gs0MuwVZH{{i|Mm$4Z0G{!MI>$Wr$0D6Lf14c^O7sM;jyF zI5W4iY-*<571j+2w2NceH7t(GDvAsejABiYy4)wq=2)y}!_9>!EG=M`W)fDnJ??mw)f+l z@8yAL9iRHfJ@%#ZEd$KzTMJljDv_SfV@%Piw@TEC^yGLR$>B(Z`(JKQJKc7(K7b*h zB_Z!;s<)FCYMbn3yYAV>T%9?KrB@`nT&9KPtEAT1TI82!$5^PjY;`_m*aH|s%X+y`2J6$=7tuxoSw=;IhG zS}zx~p041(+E(ipxDb_@u91~`@K~>TEj8)|pdEf!<}LIX;}U27l{Q{j5>RE|*kmvE zXnMi9!;?cdps(cI{wsQM`^+%jgJn*r%MYKw^8H8P1E6QUNI?hz-TYWsm2=&Ji$r%X zkZHth#`&M+i$$!9xG}B`O_fn;HxA)E4m}k%xq8X3LtvhoDXVdohZ^YNWv>O5S0K(_lmY zFV`{k%Xq+=J_Vn(qH^rg;eNp~wLQ$p4y>4uXo_UO2Ba^Z@uyYMGJ0X1T4LOWfTs6Ml#lZUznr+@5gCk+*94W@7GScXzbP-srJe2}h19sZUvBI*`wBoxtbt!+pnmFUrZY z-!tpI#VwS(t;@nn+k!wz#>)IC`iE4$Z1(wg0=$;{hxS9Uf7+be#H3fY#9v@OEGdwF z&Tk|*bHS}-S<9Wbuz~~KJIHWnpE=H$cQkoam1KDb?FBQ}EsNK-8`TsSn6`huwbCpO*=hlH3^? z$vP?Ccb{_IK}}%JEM+AQFZw01fiayVO-1x~XbOpgx~v4*8$;S!^jn9BGsK58 zN+k5Gty#Zsg@7CaRV}$cvkKZ(+rp{2d)mD}sPxOIe)8gt!Q&O^F&?q%SQSmEe<4q9 zk1sQjTu2gfP8;~91~*Cd7(5nzaYMX;@demeY74$T#mtDtmqbTWc^%D8=)(RWYp9R9zjuYzB4ozhy!S}FKYEoIJ==XT!o6)q^&#J_-X^CayT0lIhXGn91!o*fAcoJGlsaoK zGvL6bwkbgKBg#u#^~IKaBg>`yc*vRht*Rf5BL#xEQ>86`5eI@k$Hb%TP8gB=_o=o6 zv(up!dFBNiEwAq;4m>T4*)qAthPHS{l*bv4&FH6 z;CXk?s2Q7!N)G11<>}aHjyqJeh!|t5lYD!Bsq^Jd&G#R#YxeUi4?VPBYwS$+A8Vx= zocXwuW^WpEb9Uw3Oo&a z?Yq_~21*(u-A2I^1Nx1DFrz?Wg4T-$1b7jRs0 z=klBV;ofiN=`~UCk0~)VaTfMOitFG1a>7|ZJZ?CD>${?D4w1GfvR)4N0o=YptHJ+a z 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%0AQ|ravL>UlhGZcu@=L!$9pl7+m$9eDk9%^&G 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 z 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%0ALO6!L5jbTm}Gs$E1+ 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 VOquN#=m)^Pl;qXkl*yU}|6e=qd6obG literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md index 5f803bde..3a33fc71 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ # Panda3DS -[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) +[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Android Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can sort of play games! @@ -10,7 +10,7 @@ Join our Discord server by pressing on the banner below, or find us on other pla [![Discord Banner 2](https://discord.com/api/guilds/1118695732958994532/widget.png?style=banner2)](https://discord.gg/ZYbugsEmsw) -![screenshot1](docs/img/KirbyRobobot.png) ![screenshot2](docs/img/OoT_Title.png) ![screenshot3](docs/img/pokegang.png) +![screenshot1](docs/img/KirbyRobobot.png) ![screenshot2](docs/img/OoT_Title.png) ![screenshot3](docs/img/pokegang.png) ![screenshot4](docs/img/KirbyAndroid.png) # Download You can download stable builds from the Releases tab, or you can download the latest build from the tables below. Additionally, Panda3DS comes in 2 flavours on PC: A minimal SDL frontend, which does not have a GUI, and an experimental Qt 6 frontend with a proper user interface. @@ -22,16 +22,16 @@ SDL builds (No GUI): |MacOS build|[![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/MacOS_Build/master/MacOS%20Alber%20App%20Bundle.zip)| |Linux build|[![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml)|[Linux AppImage](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Linux_AppImage_Build/master/Linux%20executable.zip)| -Qt builds: +Qt and Android builds: |Platform|Status|Download| |--------|------------|--------| |Windows build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[Windows Executable](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/Windows%20executable.zip)| |MacOS build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/MacOS%20Alber%20App%20Bundle.zip)| |Linux build|[![Qt Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Qt_Build.yml)|[Linux AppImage](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Qt_Build/master/Linux%20executable.zip)| - +|Android build (arm64)|[![Android Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml/badge.svg)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Android_Build.yml)|[Android APK](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Android_Build/master/Android%20APKs%20(arm64).zip)| # Compatibility -Panda3DS is still in the early stages of development. Many games boot, many don't. Lots of games have at least some hilariously broken graphics, audio is not supported, and some QoL features (including a GUI) are missing. However, even more things are implemented, such as most of the 3DS core required to play games, and various neat features, such as Lua scripting, discord bot support, support for some system apps, cheats, controller support, WIP amiibo support and many more! The emulator is constantly evolving, so make sure to take a peek every now and then! +Panda3DS is still in the early stages of development. Many games boot, many don't. Lots of games have at least some hilariously broken graphics, audio is WIP, and some QoL features are missing. However, even more things are implemented, such as most of the 3DS core required to play games, and various neat features, such as Lua scripting, discord bot support, support for some system apps, cheats, controller support, WIP amiibo support and many more! The emulator is constantly evolving, so make sure to take a peek every now and then! For documenting game compatibility, make sure to visit the [games list repository](https://github.com/Panda3DS-emu/Panda3DS-Games-List). For miscellaneous issues or more technical issues, feel free to use this repo's issues tab. # Why? @@ -116,7 +116,7 @@ Panda3DS also supports controller input using the SDL2 GameController API. - [MelonDS](https://github.com/melonDS-emu/melonDS): "DS emulator, sorta" - Arisotura - [Kaizen](https://github.com/SimoneN64/Kaizen): Experimental work-in-progress low-level N64 emulator - [ChonkyStation](https://github.com/liuk7071/ChonkyStation): Work-in-progress PlayStation emulator -- [shadPS4](https://github.com/georgemoralis/shadPS4): Work-in-progress PS4 emulator by the founder of PCSX, PCSX2 and more +- [shadPS4](https://github.com/shadps4-emu/shadPS4): Work-in-progress PS4 emulator by the founder of PCSX, PCSX2 and more - [Hydra](https://github.com/hydra-emu/hydra): Cross-platform GameBoy, NES, N64 and Chip-8 emulator # Support From 5d28f11ccfeab671efb62d491a36758bbbe657d0 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Oct 2024 20:02:02 +0300 Subject: [PATCH 10/20] GPU: Add optimized NEON path for analyzing index buffers (#613) * Implement ARM NEON index buffer analysis * NEON: Fix initial index buffer minima/maxima * NEON: Fix vertex count comparison for index buffer analysis * GPU: Add SSE4.1 path for index buffer analysis * Fix oopsie * Fix oopsie, again --- CMakeLists.txt | 10 +- include/PICA/pica_simd.hpp | 253 ++++++++++++++++++++++++++++ src/core/PICA/draw_acceleration.cpp | 23 +-- 3 files changed, 268 insertions(+), 18 deletions(-) create mode 100644 include/PICA/pica_simd.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 641a0055..f72e8cf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -54,6 +54,7 @@ option(ENABLE_GIT_VERSIONING "Enables querying git for the emulator version" ON) option(BUILD_HYDRA_CORE "Build a Hydra core" OFF) option(BUILD_LIBRETRO_CORE "Build a Libretro core" OFF) option(ENABLE_RENDERDOC_API "Build with support for Renderdoc's capture API for graphics debugging" ON) +option(DISABLE_SSE4 "Build with SSE4 instructions disabled, may reduce performance" OFF) set(OPENGL_PROFILE ${DEFAULT_OPENGL_PROFILE} CACHE STRING "OpenGL profile to use if OpenGL is enabled. Valid values are 'OpenGL' and 'OpenGLES'.") set_property(CACHE OPENGL_PROFILE PROPERTY STRINGS OpenGL OpenGLES) @@ -211,6 +212,13 @@ else() set(HOST_ARM64 FALSE) endif() +# Enable SSE4.1 if it's not explicitly disabled +# Annoyingly, we can't easily do this if we're using MSVC cause there's no SSE4.1 flag, only SSE4.1 +if(NOT MSVC OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT DISABLE_SSE4 AND HOST_X64) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse4.1") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1") +endif() + if(ENABLE_RENDERDOC_API) find_package(RenderDoc 1.6.0 MODULE REQUIRED) add_compile_definitions(PANDA3DS_ENABLE_RENDERDOC) @@ -318,7 +326,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/audio/hle_core.hpp include/capstone.hpp include/audio/aac.hpp include/PICA/pica_frag_config.hpp include/PICA/pica_frag_uniforms.hpp include/PICA/shader_gen_types.hpp include/PICA/shader_decompiler.hpp include/PICA/pica_vert_config.hpp include/sdl_sensors.hpp include/PICA/draw_acceleration.hpp include/renderdoc.hpp - include/align.hpp include/audio/aac_decoder.hpp + include/align.hpp include/audio/aac_decoder.hpp include/PICA/pica_simd.hpp ) cmrc_add_resource_library( diff --git a/include/PICA/pica_simd.hpp b/include/PICA/pica_simd.hpp new file mode 100644 index 00000000..dfd528fc --- /dev/null +++ b/include/PICA/pica_simd.hpp @@ -0,0 +1,253 @@ +#pragma once +#include +#include +#include + +#include "helpers.hpp" + +#if defined(_M_AMD64) || defined(__x86_64__) +#define PICA_SIMD_X64 +#include +#elif defined(_M_ARM64) || defined(__aarch64__) +#define PICA_SIMD_ARM64 +#include +#endif + +// Optimized functions for analyzing PICA index buffers (Finding minimum and maximum index values inside them) +namespace PICA::IndexBuffer { + // Non-SIMD, portable algorithm + template + std::pair analyzePortable(u8* indexBuffer, u32 vertexCount) { + u16 minimumIndex = std::numeric_limits::max(); + u16 maximumIndex = 0; + + // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them + if constexpr (useShortIndices) { + u16* indexBuffer16 = reinterpret_cast(indexBuffer); + + for (u32 i = 0; i < vertexCount; i++) { + u16 index = indexBuffer16[i]; + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + } else { + for (u32 i = 0; i < vertexCount; i++) { + u16 index = u16(indexBuffer[i]); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + } + + return {minimumIndex, maximumIndex}; + } + +#ifdef PICA_SIMD_ARM64 + template + std::pair analyzeNEON(u8* indexBuffer, u32 vertexCount) { + // We process 16 bytes per iteration, which is 8 vertices if we're using u16 indices or 16 vertices if we're using u8 indices + constexpr u32 vertsPerLoop = (useShortIndices) ? 8 : 16; + + if (vertexCount < vertsPerLoop) { + return analyzePortable(indexBuffer, vertexCount); + } + + u16 minimumIndex, maximumIndex; + + if constexpr (useShortIndices) { + // 16-bit indices + uint16x8_t minima = vdupq_n_u16(0xffff); + uint16x8_t maxima = vdupq_n_u16(0); + + while (vertexCount >= vertsPerLoop) { + const uint16x8_t data = vld1q_u16(reinterpret_cast(indexBuffer)); + minima = vminq_u16(data, minima); + maxima = vmaxq_u16(data, maxima); + + indexBuffer += 16; + vertexCount -= vertsPerLoop; + } + + // Do horizontal min/max operations to get the actual minimum and maximum from all the vertices we processed with SIMD + // We want to gather the actual minimum and maximum in the line bottom lane of the minima/maxima vectors + // uint16x4_t foldedMinima1 = vmin_u16(vget_high_u16(minima), vget_low_u16(minima)); + // uint16x4_t foldedMaxima1 = vmax_u16(vget_high_u16(maxima), vget_low_u16(maxima)); + + uint16x8_t foldedMinima1 = vpminq_u16(minima, minima); + uint16x8_t foldedMinima2 = vpminq_u16(foldedMinima1, foldedMinima1); + uint16x8_t foldedMinima3 = vpminq_u16(foldedMinima2, foldedMinima2); + + uint16x8_t foldedMaxima1 = vpmaxq_u16(maxima, maxima); + uint16x8_t foldedMaxima2 = vpmaxq_u16(foldedMaxima1, foldedMaxima1); + uint16x8_t foldedMaxima3 = vpmaxq_u16(foldedMaxima2, foldedMaxima2); + + minimumIndex = vgetq_lane_u16(foldedMinima3, 0); + maximumIndex = vgetq_lane_u16(foldedMaxima3, 0); + } else { + // 8-bit indices + uint8x16_t minima = vdupq_n_u8(0xff); + uint8x16_t maxima = vdupq_n_u8(0); + + while (vertexCount >= vertsPerLoop) { + uint8x16_t data = vld1q_u8(indexBuffer); + minima = vminq_u8(data, minima); + maxima = vmaxq_u8(data, maxima); + + indexBuffer += 16; + vertexCount -= vertsPerLoop; + } + + // Do a similar horizontal min/max as in the u16 case, except now we're working uint8x16 instead of uint16x4 so we need 4 folds + uint8x16_t foldedMinima1 = vpminq_u8(minima, minima); + uint8x16_t foldedMinima2 = vpminq_u8(foldedMinima1, foldedMinima1); + uint8x16_t foldedMinima3 = vpminq_u8(foldedMinima2, foldedMinima2); + uint8x16_t foldedMinima4 = vpminq_u8(foldedMinima3, foldedMinima3); + + uint8x16_t foldedMaxima1 = vpmaxq_u8(maxima, maxima); + uint8x16_t foldedMaxima2 = vpmaxq_u8(foldedMaxima1, foldedMaxima1); + uint8x16_t foldedMaxima3 = vpmaxq_u8(foldedMaxima2, foldedMaxima2); + uint8x16_t foldedMaxima4 = vpmaxq_u8(foldedMaxima3, foldedMaxima3); + + minimumIndex = u16(vgetq_lane_u8(foldedMinima4, 0)); + maximumIndex = u16(vgetq_lane_u8(foldedMaxima4, 0)); + } + + // If any indices could not be processed cause the buffer size is not 16-byte aligned, process them the naive way + // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them + while (vertexCount > 0) { + if constexpr (useShortIndices) { + u16 index = *reinterpret_cast(indexBuffer); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + indexBuffer += 2; + } else { + u16 index = u16(*indexBuffer++); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + + vertexCount -= 1; + } + + return {minimumIndex, maximumIndex}; + } +#endif + +#if defined(PICA_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) + template + std::pair analyzeSSE4_1(u8* indexBuffer, u32 vertexCount) { + // We process 16 bytes per iteration, which is 8 vertices if we're using u16 + // indices or 16 vertices if we're using u8 indices + constexpr u32 vertsPerLoop = (useShortIndices) ? 8 : 16; + + if (vertexCount < vertsPerLoop) { + return analyzePortable(indexBuffer, vertexCount); + } + + u16 minimumIndex, maximumIndex; + + if constexpr (useShortIndices) { + // Calculate the horizontal minimum/maximum value across an SSE vector of 16-bit unsigned integers. + // Based on https://stackoverflow.com/a/22259607 + auto horizontalMin16 = [](__m128i vector) -> u16 { return u16(_mm_cvtsi128_si32(_mm_minpos_epu16(vector))); }; + + auto horizontalMax16 = [](__m128i vector) -> u16 { + // We have an instruction to compute horizontal minimum but not maximum, so we use it. + // To use it, we have to subtract each value from 0xFFFF (which we do with an xor), then execute a horizontal minimum + __m128i flipped = _mm_xor_si128(vector, _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu)); + u16 min = u16(_mm_cvtsi128_si32(_mm_minpos_epu16(flipped))); + return u16(min ^ 0xffff); + }; + + // 16-bit indices + // Initialize the minima vector to all FFs (So 0xFFFF for each 16-bit lane) + // And the maxima vector to all 0s (0 for each 16-bit lane) + __m128i minima = _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu); + __m128i maxima = _mm_set_epi32(0, 0, 0, 0); + + while (vertexCount >= vertsPerLoop) { + const __m128i data = _mm_loadu_si128(reinterpret_cast(indexBuffer)); + minima = _mm_min_epu16(data, minima); + maxima = _mm_max_epu16(data, maxima); + + indexBuffer += 16; + vertexCount -= vertsPerLoop; + } + + minimumIndex = u16(horizontalMin16(minima)); + maximumIndex = u16(horizontalMax16(maxima)); + } else { + // Calculate the horizontal minimum/maximum value across an SSE vector of 8-bit unsigned integers. + // Based on https://stackoverflow.com/a/22259607 + auto horizontalMin8 = [](__m128i vector) -> u8 { + vector = _mm_min_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(3, 2, 3, 2))); + vector = _mm_min_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(1, 1, 1, 1))); + vector = _mm_min_epu8(vector, _mm_shufflelo_epi16(vector, _MM_SHUFFLE(1, 1, 1, 1))); + vector = _mm_min_epu8(vector, _mm_srli_epi16(vector, 8)); + return u8(_mm_cvtsi128_si32(vector)); + }; + + auto horizontalMax8 = [](__m128i vector) -> u8 { + vector = _mm_max_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(3, 2, 3, 2))); + vector = _mm_max_epu8(vector, _mm_shuffle_epi32(vector, _MM_SHUFFLE(1, 1, 1, 1))); + vector = _mm_max_epu8(vector, _mm_shufflelo_epi16(vector, _MM_SHUFFLE(1, 1, 1, 1))); + vector = _mm_max_epu8(vector, _mm_srli_epi16(vector, 8)); + return u8(_mm_cvtsi128_si32(vector)); + }; + + // 8-bit indices + // Initialize the minima vector to all FFs (So 0xFF for each 8-bit lane) + // And the maxima vector to all 0s (0 for each 8-bit lane) + __m128i minima = _mm_set_epi32(0xffffffffu, 0xffffffffu, 0xffffffffu, 0xffffffffu); + __m128i maxima = _mm_set_epi32(0, 0, 0, 0); + + while (vertexCount >= vertsPerLoop) { + const __m128i data = _mm_loadu_si128(reinterpret_cast(indexBuffer)); + minima = _mm_min_epu8(data, minima); + maxima = _mm_max_epu8(data, maxima); + + indexBuffer += 16; + vertexCount -= vertsPerLoop; + } + + minimumIndex = u16(horizontalMin8(minima)); + maximumIndex = u16(horizontalMax8(maxima)); + } + + // If any indices could not be processed cause the buffer size + // is not 16-byte aligned, process them the naive way + // Calculate the minimum and maximum indices used in the index + // buffer, so we'll only upload them + while (vertexCount > 0) { + if constexpr (useShortIndices) { + u16 index = *reinterpret_cast(indexBuffer); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + indexBuffer += 2; + } else { + u16 index = u16(*indexBuffer++); + minimumIndex = std::min(minimumIndex, index); + maximumIndex = std::max(maximumIndex, index); + } + + vertexCount -= 1; + } + + return {minimumIndex, maximumIndex}; + } +#endif + + // Analyzes a PICA index buffer to get the minimum and maximum indices in the + // buffer, and returns them in a pair in the form [min, max]. Takes a template + // parameter to decide whether the indices in the buffer are u8 or u16 + template + std::pair analyze(u8* indexBuffer, u32 vertexCount) { +#if defined(PICA_SIMD_ARM64) + return analyzeNEON(indexBuffer, vertexCount); +#elif defined(PICA_SIMD_X64) && (defined(__SSE4_1__) || defined(__AVX__)) + // Annoyingly, MSVC refuses to define __SSE4_1__ even when we're building with AVX + return analyzeSSE4_1(indexBuffer, vertexCount); +#else + return analyzePortable(indexBuffer, vertexCount); +#endif + } +} // namespace PICA::IndexBuffer diff --git a/src/core/PICA/draw_acceleration.cpp b/src/core/PICA/draw_acceleration.cpp index 1850d819..d7df3b77 100644 --- a/src/core/PICA/draw_acceleration.cpp +++ b/src/core/PICA/draw_acceleration.cpp @@ -1,16 +1,17 @@ #include "PICA/draw_acceleration.hpp" #include -#include +#include #include "PICA/gpu.hpp" +#include "PICA/pica_simd.hpp" #include "PICA/regs.hpp" void GPU::getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed) { accel.indexed = indexed; accel.totalAttribCount = totalAttribCount; accel.enabledAttributeMask = 0; - + const u32 vertexBase = ((regs[PICA::InternalRegs::VertexAttribLoc] >> 1) & 0xfffffff) * 16; const u32 vertexCount = regs[PICA::InternalRegs::VertexCountReg]; // Total # of vertices to transfer @@ -27,24 +28,12 @@ void GPU::getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed) { // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them if (accel.useShortIndices) { - u16* indexBuffer16 = reinterpret_cast(indexBuffer); - - for (int i = 0; i < vertexCount; i++) { - u16 index = indexBuffer16[i]; - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } + std::tie(accel.minimumIndex, accel.maximumIndex) = PICA::IndexBuffer::analyze(indexBuffer, vertexCount); } else { - for (int i = 0; i < vertexCount; i++) { - u16 index = u16(indexBuffer[i]); - minimumIndex = std::min(minimumIndex, index); - maximumIndex = std::max(maximumIndex, index); - } + std::tie(accel.minimumIndex, accel.maximumIndex) = PICA::IndexBuffer::analyze(indexBuffer, vertexCount); } accel.indexBuffer = indexBuffer; - accel.minimumIndex = minimumIndex; - accel.maximumIndex = maximumIndex; } else { accel.indexBuffer = nullptr; accel.minimumIndex = regs[PICA::InternalRegs::VertexOffsetReg]; @@ -76,7 +65,7 @@ void GPU::getAcceleratedDrawInfo(PICA::DrawAcceleration& accel, bool indexed) { // Add it to the total vertex data size, aligned to 4 bytes. accel.vertexDataSize += (bytes + 3) & ~3; - + // Get a pointer to the data where this loader's data is stored const u32 loaderAddress = vertexBase + loaderData.offset + (accel.minimumIndex * loaderData.size); loader.data = getPointerPhys(loaderAddress); From 238d84ba3bdef801557a849f6be309eb5fac9dd2 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Oct 2024 21:45:08 +0300 Subject: [PATCH 11/20] DSP: Default to HLE --- include/config.hpp | 2 +- src/config.cpp | 2 +- src/libretro_core.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/config.hpp b/include/config.hpp index a8ba8946..0cffbf93 100644 --- a/include/config.hpp +++ b/include/config.hpp @@ -33,7 +33,7 @@ struct EmulatorConfig { int lightShadergenThreshold = 1; RendererType rendererType = RendererType::OpenGL; - Audio::DSPCore::Type dspType = Audio::DSPCore::Type::Null; + Audio::DSPCore::Type dspType = Audio::DSPCore::Type::HLE; bool sdCardInserted = true; bool sdWriteProtected = false; diff --git a/src/config.cpp b/src/config.cpp index 331ab137..25fded6c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -80,7 +80,7 @@ void EmulatorConfig::load() { if (audioResult.is_ok()) { auto audio = audioResult.unwrap(); - auto dspCoreName = toml::find_or(audio, "DSPEmulation", "Null"); + auto dspCoreName = toml::find_or(audio, "DSPEmulation", "HLE"); dspType = Audio::DSPCore::typeFromString(dspCoreName); audioEnabled = toml::find_or(audio, "EnableAudio", false); } diff --git a/src/libretro_core.cpp b/src/libretro_core.cpp index 21a62f23..ce5fddaf 100644 --- a/src/libretro_core.cpp +++ b/src/libretro_core.cpp @@ -170,7 +170,7 @@ static void configInit() { {"panda3ds_use_ubershader", EmulatorConfig::ubershaderDefault ? "Use ubershaders (No stutter, maybe slower); enabled|disabled" : "Use ubershaders (No stutter, maybe slower); disabled|enabled"}, {"panda3ds_use_vsync", "Enable VSync; enabled|disabled"}, - {"panda3ds_dsp_emulation", "DSP emulation; Null|HLE|LLE"}, + {"panda3ds_dsp_emulation", "DSP emulation; HLE|LLE|Null"}, {"panda3ds_use_audio", "Enable audio; disabled|enabled"}, {"panda3ds_use_virtual_sd", "Enable virtual SD card; enabled|disabled"}, {"panda3ds_write_protect_virtual_sd", "Write protect virtual SD card; disabled|enabled"}, From 8c80099339c3a1bee4dfce9d2645b6527fe9ae5c Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 22 Oct 2024 19:13:25 +0300 Subject: [PATCH 12/20] Implement shared font relocation --- CMakeLists.txt | 6 +- include/PICA/dynapica/pica_recs.hpp | 2 +- include/memory.hpp | 2 +- include/services/fonts.hpp | 84 ++++++++++++++ src/core/kernel/memory_management.cpp | 2 +- src/core/memory.cpp | 10 +- src/core/services/fonts.cpp | 107 ++++++++++++++++++ ...elocated.bin => SharedFontReplacement.bin} | Bin 8 files changed, 204 insertions(+), 9 deletions(-) create mode 100644 include/services/fonts.hpp create mode 100644 src/core/services/fonts.cpp rename src/core/services/fonts/{CitraSharedFontUSRelocated.bin => SharedFontReplacement.bin} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index f72e8cf6..33e4787a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -267,7 +267,7 @@ set(SERVICE_SOURCE_FILES src/core/services/service_manager.cpp src/core/services src/core/services/act.cpp src/core/services/nfc.cpp src/core/services/dlp_srvr.cpp src/core/services/ir_user.cpp src/core/services/http.cpp src/core/services/soc.cpp src/core/services/ssl.cpp src/core/services/news_u.cpp src/core/services/amiibo_device.cpp - src/core/services/csnd.cpp src/core/services/nwm_uds.cpp + src/core/services/csnd.cpp src/core/services/nwm_uds.cpp src/core/services/fonts.cpp ) set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA/shader_unit.cpp src/core/PICA/shader_interpreter.cpp src/core/PICA/dynapica/shader_rec.cpp @@ -326,14 +326,14 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/audio/hle_core.hpp include/capstone.hpp include/audio/aac.hpp include/PICA/pica_frag_config.hpp include/PICA/pica_frag_uniforms.hpp include/PICA/shader_gen_types.hpp include/PICA/shader_decompiler.hpp include/PICA/pica_vert_config.hpp include/sdl_sensors.hpp include/PICA/draw_acceleration.hpp include/renderdoc.hpp - include/align.hpp include/audio/aac_decoder.hpp include/PICA/pica_simd.hpp + include/align.hpp include/audio/aac_decoder.hpp include/PICA/pica_simd.hpp include/services/fonts.hpp ) cmrc_add_resource_library( resources_console_fonts NAMESPACE ConsoleFonts WHENCE "src/core/services/fonts/" - "src/core/services/fonts/CitraSharedFontUSRelocated.bin" + "src/core/services/fonts/SharedFontReplacement.bin" ) set(THIRD_PARTY_SOURCE_FILES third_party/imgui/imgui.cpp diff --git a/include/PICA/dynapica/pica_recs.hpp b/include/PICA/dynapica/pica_recs.hpp index acfd226e..eb0cf404 100644 --- a/include/PICA/dynapica/pica_recs.hpp +++ b/include/PICA/dynapica/pica_recs.hpp @@ -2,7 +2,7 @@ #include "helpers.hpp" #include "vertex_loader_rec.hpp" -// Common file for our PICA JITs (From vertex config -> CPU assembly and from PICA shader -> CPU assembly) +// Common file for our PICA JITs (From PICA shader -> CPU assembly) namespace Dynapica { #ifdef PANDA3DS_DYNAPICA_SUPPORTED diff --git a/include/memory.hpp b/include/memory.hpp index 2f01aa35..bd002c54 100644 --- a/include/memory.hpp +++ b/include/memory.hpp @@ -298,5 +298,5 @@ private: bool allocateMainThreadStack(u32 size); Regions getConsoleRegion(); - void copySharedFont(u8* ptr); + void copySharedFont(u8* ptr, u32 vaddr); }; diff --git a/include/services/fonts.hpp b/include/services/fonts.hpp new file mode 100644 index 00000000..9fa84be1 --- /dev/null +++ b/include/services/fonts.hpp @@ -0,0 +1,84 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +// Adapted from https://github.com/PabloMK7/citra/blob/master/src/core/hle/service/apt/bcfnt/bcfnt.h + +#pragma once + +#include + +#include "helpers.hpp" +#include "swap.hpp" + +namespace HLE::Fonts { + struct CFNT { + u8 magic[4]; + u16_le endianness; + u16_le headerSize; + u32_le version; + u32_le fileSize; + u32_le numBlocks; + }; + + struct SectionHeader { + u8 magic[4]; + u32_le sectionSize; + }; + + struct FINF { + u8 magic[4]; + u32_le sectionSize; + u8 fontType; + u8 lineFeed; + u16_le alterCharIndex; + u8 default_width[3]; + u8 encoding; + u32_le tglpOffset; + u32_le cwdhOffset; + u32_le cmapOffset; + u8 height; + u8 width; + u8 ascent; + u8 reserved; + }; + + struct TGLP { + u8 magic[4]; + u32_le sectionSize; + u8 cellWidth; + u8 cellHeight; + u8 baselinePosition; + u8 maxCharacterWidth; + u32_le sheetSize; + u16_le numSheets; + u16_le sheetImageFormat; + u16_le numColumns; + u16_le numRows; + u16_le sheetWidth; + u16_le sheetHeight; + u32_le sheetDataOffset; + }; + + struct CMAP { + u8 magic[4]; + u32_le sectionSize; + u16_le codeBegin; + u16_le codeEnd; + u16_le mappingMethod; + u16_le reserved; + u32_le nextCmapOffset; + }; + + struct CWDH { + u8 magic[4]; + u32_le sectionSize; + u16_le startIndex; + u16_le endIndex; + u32_le nextCwdhOffset; + }; + + // Relocates the internal addresses of the BCFNT Shared Font to the new base. The current base will + // be auto-detected based on the file headers. + void relocateSharedFont(u8* sharedFont, u32 newAddress); +} // namespace HLE::Fonts \ No newline at end of file diff --git a/src/core/kernel/memory_management.cpp b/src/core/kernel/memory_management.cpp index aeac6269..26f50023 100644 --- a/src/core/kernel/memory_management.cpp +++ b/src/core/kernel/memory_management.cpp @@ -136,7 +136,7 @@ void Kernel::mapMemoryBlock() { break; case KernelHandles::FontSharedMemHandle: - mem.copySharedFont(ptr); + mem.copySharedFont(ptr, addr); break; case KernelHandles::CSNDSharedMemHandle: diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 09b49eee..57eac8ca 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -7,6 +7,7 @@ #include "config_mem.hpp" #include "resource_limits.hpp" +#include "services/fonts.hpp" #include "services/ptm.hpp" CMRC_DECLARE(ConsoleFonts); @@ -51,7 +52,7 @@ void Memory::reset() { if (e.handle == KernelHandles::FontSharedMemHandle) { // Read font size from the cmrc filesystem the font is stored in auto fonts = cmrc::ConsoleFonts::get_filesystem(); - e.size = fonts.open("CitraSharedFontUSRelocated.bin").size(); + e.size = fonts.open("SharedFontReplacement.bin").size(); } e.mapped = false; @@ -520,10 +521,13 @@ Regions Memory::getConsoleRegion() { return region; } -void Memory::copySharedFont(u8* pointer) { +void Memory::copySharedFont(u8* pointer, u32 vaddr) { auto fonts = cmrc::ConsoleFonts::get_filesystem(); - auto font = fonts.open("CitraSharedFontUSRelocated.bin"); + auto font = fonts.open("SharedFontReplacement.bin"); std::memcpy(pointer, font.begin(), font.size()); + + // Relocate shared font to the address it's being loaded to + HLE::Fonts::relocateSharedFont(pointer, vaddr); } std::optional Memory::getProgramID() { diff --git a/src/core/services/fonts.cpp b/src/core/services/fonts.cpp new file mode 100644 index 00000000..51290298 --- /dev/null +++ b/src/core/services/fonts.cpp @@ -0,0 +1,107 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +// Adapted from https://github.com/PabloMK7/citra/blob/master/src/core/hle/service/apt/bcfnt/bcfnt.cpp + +#include "services/fonts.hpp" + +namespace HLE::Fonts { + void relocateSharedFont(u8* sharedFont, u32 newAddress) { + constexpr u32 sharedFontStartOffset = 0x80; + const u8* cfntData = &sharedFont[sharedFontStartOffset]; + + CFNT cfnt; + std::memcpy(&cfnt, cfntData, sizeof(cfnt)); + + u32 assumedCmapOffset = 0; + u32 assumedCwdhOffset = 0; + u32 assumedTglpOffset = 0; + u32 firstCmapOffset = 0; + u32 firstCwdhOffset = 0; + u32 firstTglpOffset = 0; + + // First discover the location of sections so that the rebase offset can be auto-detected + u32 currentOffset = sharedFontStartOffset + cfnt.headerSize; + for (uint block = 0; block < cfnt.numBlocks; ++block) { + const u8* data = &sharedFont[currentOffset]; + + SectionHeader sectionHeader; + std::memcpy(§ionHeader, data, sizeof(sectionHeader)); + + if (firstCmapOffset == 0 && std::memcmp(sectionHeader.magic, "CMAP", 4) == 0) { + firstCmapOffset = currentOffset; + } else if (firstCwdhOffset == 0 && std::memcmp(sectionHeader.magic, "CWDH", 4) == 0) { + firstCwdhOffset = currentOffset; + } else if (firstTglpOffset == 0 && std::memcmp(sectionHeader.magic, "TGLP", 4) == 0) { + firstTglpOffset = currentOffset; + } else if (std::memcmp(sectionHeader.magic, "FINF", 4) == 0) { + Fonts::FINF finf; + std::memcpy(&finf, data, sizeof(finf)); + + assumedCmapOffset = finf.cmapOffset - sizeof(SectionHeader); + assumedCwdhOffset = finf.cwdhOffset - sizeof(SectionHeader); + assumedTglpOffset = finf.tglpOffset - sizeof(SectionHeader); + } + + currentOffset += sectionHeader.sectionSize; + } + + u32 previousBase = assumedCmapOffset - firstCmapOffset; + if ((previousBase != assumedCwdhOffset - firstCwdhOffset) || (previousBase != assumedTglpOffset - firstTglpOffset)) { + Helpers::warn("You shouldn't be seeing this. Shared Font file offsets might be borked?"); + } + + u32 offset = newAddress - previousBase; + + // Reset pointer back to start of sections and do the actual rebase + currentOffset = sharedFontStartOffset + cfnt.headerSize; + for (uint block = 0; block < cfnt.numBlocks; ++block) { + u8* data = &sharedFont[currentOffset]; + + SectionHeader sectionHeader; + std::memcpy(§ionHeader, data, sizeof(sectionHeader)); + + if (std::memcmp(sectionHeader.magic, "FINF", 4) == 0) { + Fonts::FINF finf; + std::memcpy(&finf, data, sizeof(finf)); + + // Relocate the offsets in the FINF section + finf.cmapOffset += offset; + finf.cwdhOffset += offset; + finf.tglpOffset += offset; + + std::memcpy(data, &finf, sizeof(finf)); + } else if (std::memcmp(sectionHeader.magic, "CMAP", 4) == 0) { + Fonts::CMAP cmap; + std::memcpy(&cmap, data, sizeof(cmap)); + + // Relocate the offsets in the CMAP section + if (cmap.nextCmapOffset != 0) { + cmap.nextCmapOffset += offset; + } + + std::memcpy(data, &cmap, sizeof(cmap)); + } else if (std::memcmp(sectionHeader.magic, "CWDH", 4) == 0) { + Fonts::CWDH cwdh; + std::memcpy(&cwdh, data, sizeof(cwdh)); + + // Relocate the offsets in the CWDH section + if (cwdh.nextCwdhOffset != 0) { + cwdh.nextCwdhOffset += offset; + } + + std::memcpy(data, &cwdh, sizeof(cwdh)); + } else if (std::memcmp(sectionHeader.magic, "TGLP", 4) == 0) { + Fonts::TGLP tglp; + std::memcpy(&tglp, data, sizeof(tglp)); + + // Relocate the offsets in the TGLP section + tglp.sheetDataOffset += offset; + std::memcpy(data, &tglp, sizeof(tglp)); + } + + currentOffset += sectionHeader.sectionSize; + } + } +} // namespace HLE::Fonts \ No newline at end of file diff --git a/src/core/services/fonts/CitraSharedFontUSRelocated.bin b/src/core/services/fonts/SharedFontReplacement.bin similarity index 100% rename from src/core/services/fonts/CitraSharedFontUSRelocated.bin rename to src/core/services/fonts/SharedFontReplacement.bin From 54d0618f028f1f40efd7e539c16977d7cb887b91 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Wed, 23 Oct 2024 10:57:59 +0300 Subject: [PATCH 13/20] Fonts: Fix IWYU bug --- src/core/services/fonts.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/services/fonts.cpp b/src/core/services/fonts.cpp index 51290298..ec4652ee 100644 --- a/src/core/services/fonts.cpp +++ b/src/core/services/fonts.cpp @@ -6,6 +6,8 @@ #include "services/fonts.hpp" +#include + namespace HLE::Fonts { void relocateSharedFont(u8* sharedFont, u32 newAddress) { constexpr u32 sharedFontStartOffset = 0x80; @@ -104,4 +106,4 @@ namespace HLE::Fonts { currentOffset += sectionHeader.sectionSize; } } -} // namespace HLE::Fonts \ No newline at end of file +} // namespace HLE::Fonts From cdc61ea95a3c101a7c311054e96a8b3e28f98c92 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Wed, 23 Oct 2024 22:43:58 +0300 Subject: [PATCH 14/20] GL renderer: Add fallback for when driver doesn't provide glDrawRangeElementsBaseVertex (#617) * GL: Add fallback for when driver doesn't provide glDrawRangeElementsBaseVertex * GL: Fix fallback when glDrawRangeElementsBaseVertex is absent --- include/PICA/pica_simd.hpp | 21 +++++++++++++++++++ src/core/renderer_gl/renderer_gl.cpp | 30 ++++++++++++++++++++++------ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/include/PICA/pica_simd.hpp b/include/PICA/pica_simd.hpp index dfd528fc..ae7d04eb 100644 --- a/include/PICA/pica_simd.hpp +++ b/include/PICA/pica_simd.hpp @@ -250,4 +250,25 @@ namespace PICA::IndexBuffer { return analyzePortable(indexBuffer, vertexCount); #endif } + + // In some really unfortunate scenarios (eg Android Studio emulator), we don't have access to glDrawRangeElementsBaseVertex + // So we need to subtract the base vertex index from every index in the index buffer ourselves + // This is not really common, so we do it without SIMD for the moment, just to be able to run on Android Studio + template + void subtractBaseIndex(u8* indexBuffer, u32 indexCount, u16 baseIndex) { + // Calculate the minimum and maximum indices used in the index buffer, so we'll only upload them + if constexpr (useShortIndices) { + u16* indexBuffer16 = reinterpret_cast(indexBuffer); + + for (u32 i = 0; i < indexCount; i++) { + indexBuffer16[i] -= baseIndex; + } + } else { + u8 baseIndex8 = u8(baseIndex); + + for (u32 i = 0; i < indexCount; i++) { + indexBuffer[i] -= baseIndex8; + } + } + } } // namespace PICA::IndexBuffer diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index 30f9be91..90b8f910 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -8,6 +8,7 @@ #include "PICA/float_types.hpp" #include "PICA/gpu.hpp" #include "PICA/pica_frag_uniforms.hpp" +#include "PICA/pica_simd.hpp" #include "PICA/regs.hpp" #include "PICA/shader_decompiler.hpp" #include "config.hpp" @@ -192,8 +193,8 @@ void RendererGL::initGraphicsContextInternal() { reset(); // Populate our driver info structure - driverInfo.supportsExtFbFetch = GLAD_GL_EXT_shader_framebuffer_fetch != 0; - driverInfo.supportsArmFbFetch = GLAD_GL_ARM_shader_framebuffer_fetch != 0; + driverInfo.supportsExtFbFetch = (GLAD_GL_EXT_shader_framebuffer_fetch != 0); + driverInfo.supportsArmFbFetch = (GLAD_GL_ARM_shader_framebuffer_fetch != 0); // Initialize the default vertex shader used with shadergen std::string defaultShadergenVSSource = fragShaderGen.getDefaultVertexShader(); @@ -519,10 +520,20 @@ void RendererGL::drawVertices(PICA::PrimType primType, std::span v if (performIndexedRender) { // When doing indexed rendering, use glDrawRangeElementsBaseVertex to issue the indexed draw hwIndexBuffer->Bind(); - glDrawRangeElementsBaseVertex( - primitiveTopology, minimumIndex, maximumIndex, GLsizei(vertices.size()), usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, - hwIndexBufferOffset, -GLint(minimumIndex) - ); + + if (glDrawRangeElementsBaseVertex != nullptr) [[likely]] { + glDrawRangeElementsBaseVertex( + primitiveTopology, minimumIndex, maximumIndex, GLsizei(vertices.size()), usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, + hwIndexBufferOffset, -GLint(minimumIndex) + ); + } else { + // If glDrawRangeElementsBaseVertex is not available then prepareForDraw will have subtracted the base vertex from the index buffer + // for us, so just use glDrawRangeElements + glDrawRangeElements( + primitiveTopology, 0, GLint(maximumIndex - minimumIndex), GLsizei(vertices.size()), + usingShortIndices ? GL_UNSIGNED_SHORT : GL_UNSIGNED_BYTE, hwIndexBufferOffset + ); + } } else { // When doing non-indexed rendering, just use glDrawArrays OpenGL::draw(primitiveTopology, GLsizei(vertices.size())); @@ -1170,6 +1181,13 @@ void RendererGL::accelerateVertexUpload(ShaderUnit& shaderUnit, PICA::DrawAccele hwIndexBufferOffset = reinterpret_cast(usize(indexBufferRes.buffer_offset)); std::memcpy(indexBufferRes.pointer, accel->indexBuffer, indexBufferSize); + // If we don't have glDrawRangeElementsBaseVertex, we must subtract the base index value from our index buffer manually + if (glDrawRangeElementsBaseVertex == nullptr) [[unlikely]] { + const u32 indexCount = regs[PICA::InternalRegs::VertexCountReg]; + usingShortIndices ? PICA::IndexBuffer::subtractBaseIndex((u8*)indexBufferRes.pointer, indexCount, accel->minimumIndex) + : PICA::IndexBuffer::subtractBaseIndex((u8*)indexBufferRes.pointer, indexCount, accel->minimumIndex); + } + hwIndexBuffer->Unmap(indexBufferSize); } From 8cf0fbef1b413871642873cb8fefe6ce7a8cf4e5 Mon Sep 17 00:00:00 2001 From: Gabriel Machado <97042217+GabrielBRDeveloper@users.noreply.github.com> Date: Thu, 24 Oct 2024 13:51:53 -0400 Subject: [PATCH 15/20] Implement support to sensors (#618) * Implement sensors * Fix memory leak in accel --- include/sdl_sensors.hpp | 44 +++++++------ src/jni_driver.cpp | 16 ++++- .../com/panda3ds/pandroid/AlberDriver.java | 4 +- .../panda3ds/pandroid/app/GameActivity.java | 63 ++++++++++++++++++- .../app/provider/AppDataDocumentProvider.java | 2 +- .../panda3ds/pandroid/math/Quaternion.java | 31 +++++++++ .../com/panda3ds/pandroid/math/Vector3.java | 32 ++++++++++ 7 files changed, 169 insertions(+), 23 deletions(-) create mode 100644 src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java create mode 100644 src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java diff --git a/include/sdl_sensors.hpp b/include/sdl_sensors.hpp index 6de040ec..e34721af 100644 --- a/include/sdl_sensors.hpp +++ b/include/sdl_sensors.hpp @@ -2,31 +2,37 @@ #include #include -#include #include "helpers.hpp" #include "services/hid.hpp" +// Convert SDL sensor readings to 3DS format +// We use the same code for Android as well, since the values we get from Android are in the same format as SDL (m/s^2 for acceleration, rad/s for +// rotation) namespace Sensors::SDL { - // Convert the rotation data we get from SDL sensor events to rotation data we can feed right to HID - // Returns [pitch, roll, yaw] - static glm::vec3 convertRotation(glm::vec3 rotation) { - // Convert the rotation from rad/s to deg/s and scale by the gyroscope coefficient in HID - constexpr float scale = 180.f / std::numbers::pi * HIDService::gyroscopeCoeff; - // The axes are also inverted, so invert scale before the multiplication. - return rotation * -scale; - } + // Convert the rotation data we get from SDL sensor events to rotation data we can feed right to HID + // Returns [pitch, roll, yaw] + static glm::vec3 convertRotation(glm::vec3 rotation) { + // Annoyingly, Android doesn't support the header yet so we define pi ourselves + static constexpr double pi = 3.141592653589793; + // Convert the rotation from rad/s to deg/s and scale by the gyroscope coefficient in HID + constexpr float scale = 180.f / pi * HIDService::gyroscopeCoeff; + // The axes are also inverted, so invert scale before the multiplication. + return rotation * -scale; + } - static glm::vec3 convertAcceleration(float* data) { - // Set our cap to ~9 m/s^2. The 3DS sensors cap at -930 and +930, so values above this value will get clamped to 930 - // At rest (3DS laid flat on table), hardware reads around ~0 for x and z axis, and around ~480 for y axis due to gravity. - // This code tries to mimic this approximately, with offsets based on measurements from my DualShock 4. - static constexpr float accelMax = 9.f; + static glm::vec3 convertAcceleration(float* data) { + // Set our cap to ~9 m/s^2. The 3DS sensors cap at -930 and +930, so values above this value will get clamped to 930 + // At rest (3DS laid flat on table), hardware reads around ~0 for x and z axis, and around ~480 for y axis due to gravity. + // This code tries to mimic this approximately, with offsets based on measurements from my DualShock 4. + static constexpr float accelMax = 9.f; + // We define standard gravity(g) ourself instead of using the SDL one in order for the code to work on Android too. + static constexpr float standardGravity = 9.80665f; - s16 x = std::clamp(s16(data[0] / accelMax * 930.f), -930, +930); - s16 y = std::clamp(s16(data[1] / (SDL_STANDARD_GRAVITY * accelMax) * 930.f - 350.f), -930, +930); - s16 z = std::clamp(s16((data[2] - 2.1f) / accelMax * 930.f), -930, +930); + s16 x = std::clamp(s16(data[0] / accelMax * 930.f), -930, +930); + s16 y = std::clamp(s16(data[1] / (standardGravity * accelMax) * 930.f - 350.f), -930, +930); + s16 z = std::clamp(s16((data[2] - 2.1f) / accelMax * 930.f), -930, +930); - return glm::vec3(x, y, z); - } + return glm::vec3(x, y, z); + } } // namespace Sensors::SDL diff --git a/src/jni_driver.cpp b/src/jni_driver.cpp index e4ce2b39..084c9385 100644 --- a/src/jni_driver.cpp +++ b/src/jni_driver.cpp @@ -8,6 +8,7 @@ #include "renderer_gl/renderer_gl.hpp" #include "services/hid.hpp" #include "android_utils.hpp" +#include "sdl_sensors.hpp" std::unique_ptr emulator = nullptr; HIDService* hidService = nullptr; @@ -110,6 +111,19 @@ AlberFunction(void, TouchScreenUp)(JNIEnv* env, jobject obj) { hidService->relea AlberFunction(void, KeyUp)(JNIEnv* env, jobject obj, jint keyCode) { hidService->releaseKey((u32)keyCode); } AlberFunction(void, KeyDown)(JNIEnv* env, jobject obj, jint keyCode) { hidService->pressKey((u32)keyCode); } +AlberFunction(void, SetGyro)(JNIEnv* env, jobject obj, jfloat roll, jfloat pitch, jfloat yaw) { + auto rotation = Sensors::SDL::convertRotation({ float(roll), float(pitch), float(yaw) }); + hidService->setPitch(s16(rotation.x)); + hidService->setRoll(s16(rotation.y)); + hidService->setYaw(s16(rotation.z)); +} + +AlberFunction(void, SetAccel)(JNIEnv* env, jobject obj, jfloat rawX, jfloat rawY, jfloat rawZ) { + float data[3] = { float(rawX), float(rawY), float(rawZ) }; + auto accel = Sensors::SDL::convertAcceleration(data); + hidService->setAccel(accel.x, accel.y, accel.z); +} + AlberFunction(void, SetCirclepadAxis)(JNIEnv* env, jobject obj, jint x, jint y) { hidService->setCirclepadX((s16)x); hidService->setCirclepadY((s16)y); @@ -139,4 +153,4 @@ int AndroidUtils::openDocument(const char* path, const char* perms) { env->DeleteLocalRef(jmode); return (int)result; -} \ No newline at end of file +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java index f7a3394b..84977a00 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java @@ -24,7 +24,9 @@ public class AlberDriver { public static native void KeyUp(int code); public static native void SetCirclepadAxis(int x, int y); public static native void TouchScreenUp(); - public static native void TouchScreenDown(int x, int y); + public static native void TouchScreenDown(int x, int y);; + public static native void SetGyro(float roll, float pitch, float yaw); + public static native void SetAccel(float x, float y, float z); public static native void Pause(); public static native void Resume(); public static native void LoadLuaScript(String script); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java index 83d18d99..1ed034de 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java @@ -3,11 +3,21 @@ package com.panda3ds.pandroid.app; import android.app.ActivityManager; import android.app.PictureInPictureParams; import android.content.Intent; +import android.content.res.Configuration; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.opengl.Matrix; import android.os.Build; import android.os.Bundle; +import android.renderscript.Matrix3f; +import android.renderscript.Matrix4f; +import android.util.Log; import android.util.Rational; import android.view.KeyEvent; import android.view.MotionEvent; +import android.view.Surface; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; @@ -25,6 +35,7 @@ import com.panda3ds.pandroid.app.game.EmulatorCallback; import com.panda3ds.pandroid.data.config.GlobalConfig; import com.panda3ds.pandroid.input.InputHandler; import com.panda3ds.pandroid.input.InputMap; +import com.panda3ds.pandroid.math.Vector3; import com.panda3ds.pandroid.utils.Constants; import com.panda3ds.pandroid.view.PandaGlSurfaceView; import com.panda3ds.pandroid.view.PandaLayoutController; @@ -32,7 +43,7 @@ import com.panda3ds.pandroid.view.ds.DsLayoutManager; import com.panda3ds.pandroid.view.renderer.ConsoleRenderer; import com.panda3ds.pandroid.view.utils.PerformanceView; -public class GameActivity extends BaseActivity implements EmulatorCallback { +public class GameActivity extends BaseActivity implements EmulatorCallback, SensorEventListener { private final DrawerFragment drawerFragment = new DrawerFragment(); private final AlberInputListener inputListener = new AlberInputListener(this); private ConsoleRenderer renderer; @@ -74,6 +85,19 @@ public class GameActivity extends BaseActivity implements EmulatorCallback { ((FrameLayout) findViewById(R.id.panda_gl_frame)).addView(view, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); } swapScreens(GlobalConfig.get(GlobalConfig.KEY_CURRENT_DS_LAYOUT)); + registerSensors(); + } + + private void registerSensors() { + SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); + Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); + if (accel != null) { + sensorManager.registerListener(this, accel, 1); + } + Sensor gryro = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); + if (gryro != null) { + sensorManager.registerListener(this, gryro, 1); + } } private void changeOverlayVisibility(boolean visible) { @@ -94,6 +118,7 @@ public class GameActivity extends BaseActivity implements EmulatorCallback { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { getTheme().applyStyle(R.style.GameActivityNavigationBar, true); } + registerSensors(); } private void enablePIP() { @@ -113,6 +138,7 @@ public class GameActivity extends BaseActivity implements EmulatorCallback { protected void onPause() { super.onPause(); + ((SensorManager)getSystemService(SENSOR_SERVICE)).unregisterListener(this); InputHandler.reset(); if (GlobalConfig.get(GlobalConfig.KEY_PICTURE_IN_PICTURE)) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) { @@ -174,10 +200,45 @@ public class GameActivity extends BaseActivity implements EmulatorCallback { @Override protected void onDestroy() { + ((SensorManager)getSystemService(SENSOR_SERVICE)).unregisterListener(this); if (AlberDriver.HasRomLoaded()) { AlberDriver.Finalize(); } super.onDestroy(); } + + private float getDeviceRotationAngle() { + int rotation = getWindow().getDecorView().getDisplay().getRotation(); + switch (rotation) { + case Surface.ROTATION_90: return 90.0f; + case Surface.ROTATION_180: return 180.0f; + case Surface.ROTATION_270: return -90.0f; + default: return 0.0f; + } + } + + @Override + public void onSensorChanged(SensorEvent event) { + if (AlberDriver.HasRomLoaded()) { + Sensor sensor = event.sensor; + switch (sensor.getType()) { + case Sensor.TYPE_ACCELEROMETER: { + float[] values = event.values; + Vector3 vec3 = new Vector3(values[0], values[1], values[2]); + vec3.rotateByEuler(new Vector3(0, 0, (float) (getDeviceRotationAngle() * (Math.PI / 180.0f)))); + AlberDriver.SetAccel(vec3.x, vec3.y, vec3.z); + } break; + case Sensor.TYPE_GYROSCOPE: { + float[] values = event.values; + Vector3 vec3 = new Vector3(values[0], values[1], values[2]); + vec3.rotateByEuler(new Vector3(0, 0, (float) (getDeviceRotationAngle() * (Math.PI / 180.0f)))); + AlberDriver.SetGyro(vec3.x, vec3.y, vec3.z); + } break; + } + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) {} } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java index ca6fad90..397eef05 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/provider/AppDataDocumentProvider.java @@ -95,7 +95,7 @@ public class AppDataDocumentProvider extends DocumentsProvider { private void includeFile(MatrixCursor cursor, File file) { int flags = 0; if (file.isDirectory()) { - flags = Document.FLAG_DIR_SUPPORTS_CREATE; + flags = Document.FLAG_DIR_SUPPORTS_CREATE | Document.FLAG_SUPPORTS_DELETE; } else { flags = Document.FLAG_SUPPORTS_WRITE | Document.FLAG_SUPPORTS_REMOVE | Document.FLAG_SUPPORTS_DELETE; } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java new file mode 100644 index 00000000..7c485c6c --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Quaternion.java @@ -0,0 +1,31 @@ +package com.panda3ds.pandroid.math; + +public class Quaternion { + public float x, y, z, w; + public Quaternion(float x, float y, float z, float w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + + public Quaternion fromEuler(Vector3 euler) { + float x = euler.x; + float y = euler.y; + float z = euler.z; + + double c1 = Math.cos(x / 2.0); + double c2 = Math.cos(y / 2.0); + double c3 = Math.cos(z / 2.0); + + double s1 = Math.sin(x / 2.0); + double s2 = Math.sin(y / 2.0); + double s3 = Math.sin(z / 2.0); + + this.x = (float) (s1 * c2 * c3 + c1 * s2 * s3); + this.y = (float) (c1 * s2 * c3 - s1 * c2 * s3); + this.z = (float) (c1 * c2 * s3 + s1 * s2 * c3); + this.w = (float) (c1 * c2 * c3 - s1 * s2 * s3); + return this; + } +} diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java new file mode 100644 index 00000000..055972ec --- /dev/null +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/math/Vector3.java @@ -0,0 +1,32 @@ +package com.panda3ds.pandroid.math; + +public class Vector3 { + private final Quaternion quaternion = new Quaternion(0, 0, 0, 0); + public float x, y, z; + + public Vector3(float x, float y, float z) { + this.x = x; + this.y = y; + this.z = z; + } + + public Vector3 rotateByEuler(Vector3 euler) { + this.quaternion.fromEuler(euler); + + float x = this.x, y = this.y, z = this.z; + float qx = this.quaternion.x; + float qy = this.quaternion.y; + float qz = this.quaternion.z; + float qw = this.quaternion.w; + + float ix = qw * x + qy * z - qz * y; + float iy = qw * y + qz * x - qx * z; + float iz = qw * z + qx * y - qy * x; + float iw = -qx * x - qy * qz * z; + + this.x = ix * qw + iw * -qx + iy * -qz - iz * -qy; + this.y = iy * qw + iw * -qy + iz * -qx - ix * -qz; + this.z = iz * qw + iw * -qz + ix * -qy - iy * -qx; + return this; + } +} From 28c5b565c07962efcf14cfbc6806d9cf443a6bad Mon Sep 17 00:00:00 2001 From: Gabriel Machado <97042217+GabrielBRDeveloper@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:07:36 -0400 Subject: [PATCH 16/20] Implement accurate shader multiply option --- src/jni_driver.cpp | 1 + .../src/main/java/com/panda3ds/pandroid/AlberDriver.java | 1 + .../main/java/com/panda3ds/pandroid/app/GameActivity.java | 2 +- .../pandroid/app/preferences/AdvancedPreferences.java | 2 ++ .../preferences/screen_editor/ScreenEditorPreference.java | 2 +- .../com/panda3ds/pandroid/data/config/GlobalConfig.java | 1 + .../java/com/panda3ds/pandroid/view/PandaGlRenderer.java | 1 + src/pandroid/app/src/main/res/values-pt-rBR/strings.xml | 2 ++ src/pandroid/app/src/main/res/values/strings.xml | 2 ++ src/pandroid/app/src/main/res/xml/advanced_preferences.xml | 6 ++++++ 10 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/jni_driver.cpp b/src/jni_driver.cpp index 084c9385..9df7c067 100644 --- a/src/jni_driver.cpp +++ b/src/jni_driver.cpp @@ -44,6 +44,7 @@ extern "C" { AlberFunction(void, functionName) (JNIEnv* env, jobject obj, type value) { emulator->getConfig().settingName = value; } MAKE_SETTING(setShaderJitEnabled, jboolean, shaderJitEnabled) +MAKE_SETTING(setAccurateShaderMulEnable, jboolean, accurateShaderMul) #undef MAKE_SETTING diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java index 84977a00..bb3945b5 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/AlberDriver.java @@ -33,6 +33,7 @@ public class AlberDriver { public static native byte[] GetSmdh(); public static native void setShaderJitEnabled(boolean enable); + public static native void setAccurateShaderMulEnable(boolean enable); public static int openDocument(String path, String mode) { try { diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java index 1ed034de..eebe354f 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java @@ -109,7 +109,7 @@ public class GameActivity extends BaseActivity implements EmulatorCallback, Sens @Override protected void onResume() { super.onResume(); - getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); InputHandler.reset(); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java index 176bab14..8d04403e 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/AdvancedPreferences.java @@ -22,6 +22,7 @@ public class AdvancedPreferences extends BasePreferenceFragment { setItemClick("performanceMonitor", pref -> GlobalConfig.set(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY, ((SwitchPreferenceCompat) pref).isChecked())); setItemClick("shaderJit", pref -> GlobalConfig.set(GlobalConfig.KEY_SHADER_JIT, ((SwitchPreferenceCompat) pref).isChecked())); + setItemClick("accurateShaderMul", pref -> GlobalConfig.set(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY, ((SwitchPreferenceCompat) pref).isChecked())); setItemClick("loggerService", pref -> { boolean checked = ((SwitchPreferenceCompat) pref).isChecked(); Context ctx = PandroidApplication.getAppContext(); @@ -46,5 +47,6 @@ public class AdvancedPreferences extends BasePreferenceFragment { ((SwitchPreferenceCompat) findPreference("performanceMonitor")).setChecked(GlobalConfig.get(GlobalConfig.KEY_SHOW_PERFORMANCE_OVERLAY)); ((SwitchPreferenceCompat) findPreference("loggerService")).setChecked(GlobalConfig.get(GlobalConfig.KEY_LOGGER_SERVICE)); ((SwitchPreferenceCompat) findPreference("shaderJit")).setChecked(GlobalConfig.get(GlobalConfig.KEY_SHADER_JIT)); + ((SwitchPreferenceCompat) findPreference("accurateShaderMul")).setChecked(GlobalConfig.get(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY)); } } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java index 4bc6e299..14c4e576 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/screen_editor/ScreenEditorPreference.java @@ -23,7 +23,7 @@ public class ScreenEditorPreference extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { layout = new LinearLayout(container.getContext()); - layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION|View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE); + layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN|View.SYSTEM_UI_FLAG_IMMERSIVE); return layout; } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java index 448d561a..c8750f88 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/data/config/GlobalConfig.java @@ -22,6 +22,7 @@ public class GlobalConfig { public static DataModel data; public static final Key KEY_SHADER_JIT = new Key<>("emu.shader_jit", true); + public static final Key KEY_ACCURATE_SHADER_MULTIPLY = new Key<>("emu.accurate_shader_mul", false); public static final Key KEY_PICTURE_IN_PICTURE = new Key<>("app.behavior.pictureInPicture", false); public static final Key KEY_SHOW_PERFORMANCE_OVERLAY = new Key<>("dev.performanceOverlay", false); public static final Key KEY_LOGGER_SERVICE = new Key<>("dev.loggerService", false); diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java index c57421ab..3fb435b4 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/view/PandaGlRenderer.java @@ -93,6 +93,7 @@ public class PandaGlRenderer implements GLSurfaceView.Renderer, ConsoleRenderer AlberDriver.Initialize(); AlberDriver.setShaderJitEnabled(GlobalConfig.get(GlobalConfig.KEY_SHADER_JIT)); + AlberDriver.setAccurateShaderMulEnable(GlobalConfig.get(GlobalConfig.KEY_ACCURATE_SHADER_MULTIPLY)); // If loading the ROM failed, display an error message and early exit if (!AlberDriver.LoadRom(romPath)) { diff --git a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml index f2e144c3..0ecb1280 100644 --- a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml +++ b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml @@ -90,4 +90,6 @@ Comportamento Jogo invalido Ferramentas + Multiplicação precisa de shader + Usar calculos mais precisos para shaders diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml index 25569528..c8bdec58 100644 --- a/src/pandroid/app/src/main/res/values/strings.xml +++ b/src/pandroid/app/src/main/res/values/strings.xml @@ -96,4 +96,6 @@ Taiwan Behavior Invalid game + Accurate shader multiplication + Use better precision on shaders diff --git a/src/pandroid/app/src/main/res/xml/advanced_preferences.xml b/src/pandroid/app/src/main/res/xml/advanced_preferences.xml index 6602fdfd..9ef81dbf 100644 --- a/src/pandroid/app/src/main/res/xml/advanced_preferences.xml +++ b/src/pandroid/app/src/main/res/xml/advanced_preferences.xml @@ -28,5 +28,11 @@ app:summary="@string/pref_shader_jit_summary" app:iconSpaceReserved="false"/> + + \ No newline at end of file From 85d363c17d3935c3e5048628f36ba73925e4c032 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Fri, 25 Oct 2024 00:28:01 +0300 Subject: [PATCH 17/20] Android: Update shader multiplication text --- src/pandroid/app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml index c8bdec58..6f15e6dd 100644 --- a/src/pandroid/app/src/main/res/values/strings.xml +++ b/src/pandroid/app/src/main/res/values/strings.xml @@ -97,5 +97,5 @@ Behavior Invalid game Accurate shader multiplication - Use better precision on shaders + Can improve rendering at a small performance loss From a6750e7aef97e674fa07b40e20e3f535caebb8a1 Mon Sep 17 00:00:00 2001 From: Gabriel Machado <97042217+GabrielBRDeveloper@users.noreply.github.com> Date: Fri, 25 Oct 2024 03:22:26 -0400 Subject: [PATCH 18/20] Import key option in android (#620) * Implement option to import keys * Fix crashes * Remove redundant code --- src/jni_driver.cpp | 1 + .../panda3ds/pandroid/app/GameActivity.java | 4 ++ .../app/base/BasePreferenceFragment.java | 4 ++ .../app/preferences/GeneralPreferences.java | 56 ++++++++++++++++++- .../panda3ds/pandroid/utils/FileUtils.java | 4 ++ .../src/main/res/values-pt-rBR/strings.xml | 6 ++ .../app/src/main/res/values/strings.xml | 6 ++ .../src/main/res/xml/general_preference.xml | 10 ++++ 8 files changed, 90 insertions(+), 1 deletion(-) diff --git a/src/jni_driver.cpp b/src/jni_driver.cpp index 9df7c067..fbfae8ff 100644 --- a/src/jni_driver.cpp +++ b/src/jni_driver.cpp @@ -89,6 +89,7 @@ AlberFunction(void, Finalize)(JNIEnv* env, jobject obj) { emulator = nullptr; hidService = nullptr; renderer = nullptr; + romLoaded = false; } AlberFunction(jboolean, HasRomLoaded)(JNIEnv* env, jobject obj) { return romLoaded; } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java index eebe354f..503684ac 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/GameActivity.java @@ -15,6 +15,7 @@ import android.renderscript.Matrix3f; import android.renderscript.Matrix4f; import android.util.Log; import android.util.Rational; +import android.view.Display; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Surface; @@ -209,6 +210,9 @@ public class GameActivity extends BaseActivity implements EmulatorCallback, Sens } private float getDeviceRotationAngle() { + if (getWindow().getDecorView() == null || getWindow().getDecorView().getDisplay() == null) + return 0.0f; + int rotation = getWindow().getDecorView().getDisplay().getRotation(); switch (rotation) { case Surface.ROTATION_90: return 90.0f; diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java index 9426c098..ae8d49ad 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/base/BasePreferenceFragment.java @@ -26,6 +26,10 @@ public abstract class BasePreferenceFragment extends PreferenceFragmentCompat { ((SwitchPreferenceCompat)findPreference(id)).setChecked(value); } + protected void setSummaryValue(String id,String text) { + findPreference(id).setSummary(text); + } + protected void setActivityTitle(@StringRes int titleId) { ActionBar header = ((AppCompatActivity) requireActivity()).getSupportActionBar(); if (header != null) { diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java index 0b003db9..cf16bc50 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java @@ -1,7 +1,13 @@ package com.panda3ds.pandroid.app.preferences; +import android.net.Uri; import android.os.Bundle; +import android.util.Log; +import android.widget.Toast; +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; import androidx.annotation.Nullable; import androidx.preference.SwitchPreferenceCompat; @@ -10,8 +16,11 @@ import com.panda3ds.pandroid.app.PreferenceActivity; import com.panda3ds.pandroid.app.base.BasePreferenceFragment; import com.panda3ds.pandroid.app.preferences.screen_editor.ScreenLayoutsPreference; import com.panda3ds.pandroid.data.config.GlobalConfig; +import com.panda3ds.pandroid.utils.FileUtils; -public class GeneralPreferences extends BasePreferenceFragment { +public class GeneralPreferences extends BasePreferenceFragment implements ActivityResultCallback { + private final ActivityResultContracts.OpenDocument openFolderContract = new ActivityResultContracts.OpenDocument(); + private ActivityResultLauncher pickFileRequest; @Override public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { setPreferencesFromResource(R.xml.general_preference, rootKey); @@ -21,6 +30,11 @@ public class GeneralPreferences extends BasePreferenceFragment { setItemClick("behavior.pictureInPicture", (pref)-> GlobalConfig.set(GlobalConfig.KEY_PICTURE_IN_PICTURE, ((SwitchPreferenceCompat)pref).isChecked())); setActivityTitle(R.string.general); refresh(); + + setItemClick("games.aes_key", pref -> pickFileRequest.launch(new String[]{ "text/plain" })); + setItemClick("games.seed_db", pref -> pickFileRequest.launch(new String[]{ "application/octet-stream" })); + + pickFileRequest = registerForActivityResult(openFolderContract, this); } @Override @@ -31,5 +45,45 @@ public class GeneralPreferences extends BasePreferenceFragment { private void refresh() { setSwitchValue("behavior.pictureInPicture", GlobalConfig.get(GlobalConfig.KEY_PICTURE_IN_PICTURE)); + setSummaryValue("games.aes_key", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/aes_keys.txt") ? R.string.file_available : R.string.file_not_available), "aes_key.txt")); + setSummaryValue("games.seed_db", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/seeddb.bin") ? R.string.file_available : R.string.file_not_available), "seeddb.bin")); } + + @Override + public void onDestroy() { + super.onDestroy(); + if (pickFileRequest != null) { + pickFileRequest.unregister(); + pickFileRequest = null; + } + } + + @Override + public void onActivityResult(Uri result) { + if (result != null) { + String path = result.toString(); + Log.w("File", path + " -> " + FileUtils.getName(path)); + switch (String.valueOf(FileUtils.getName(path))) { + case "aes_keys.txt": + case "seeddb.bin": { + String name = FileUtils.getName(path); + if (FileUtils.getLength(path) < 1024 * 256) { + String sysdataFolder = FileUtils.getPrivatePath() + "/sysdata"; + if (!FileUtils.exists(sysdataFolder)) { + FileUtils.createDir(FileUtils.getPrivatePath(), "sysdata"); + } + if (FileUtils.exists(sysdataFolder + "/" + name)) { + FileUtils.delete(sysdataFolder + "/" + name); + } + FileUtils.copyFile(path, FileUtils.getPrivatePath() + "/sysdata/", name); + Toast.makeText(getActivity(), String.format(getString(R.string.file_imported), name), Toast.LENGTH_LONG).show(); + } else { + Toast.makeText(getActivity(), R.string.invalid_file, Toast.LENGTH_LONG).show(); + } + } break; + default: Toast.makeText(getActivity(), R.string.invalid_file, Toast.LENGTH_LONG).show(); break; + } + refresh(); + } + } } diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java index 85245454..26b029d9 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/utils/FileUtils.java @@ -230,6 +230,10 @@ public class FileUtils { return parseFile(path).lastModified(); } + public static long getLength(String path) { + return parseFile(path).length(); + } + public static String[] listFiles(String path) { DocumentFile folder = parseFile(path); DocumentFile[] files = folder.listFiles(); diff --git a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml index 0ecb1280..521f199e 100644 --- a/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml +++ b/src/pandroid/app/src/main/res/values-pt-rBR/strings.xml @@ -92,4 +92,10 @@ Ferramentas Multiplicação precisa de shader Usar calculos mais precisos para shaders + Importar chaves + %s disponível + %s não disponível + Importar SeedDB + Arquivo inválido + %s Importado diff --git a/src/pandroid/app/src/main/res/values/strings.xml b/src/pandroid/app/src/main/res/values/strings.xml index 6f15e6dd..63a6c246 100644 --- a/src/pandroid/app/src/main/res/values/strings.xml +++ b/src/pandroid/app/src/main/res/values/strings.xml @@ -98,4 +98,10 @@ Invalid game Accurate shader multiplication Can improve rendering at a small performance loss + Import keys + %s imported + %s available + %s not available + Import SeedDB + Invalid file diff --git a/src/pandroid/app/src/main/res/xml/general_preference.xml b/src/pandroid/app/src/main/res/xml/general_preference.xml index 3e2d93c8..4352ee54 100644 --- a/src/pandroid/app/src/main/res/xml/general_preference.xml +++ b/src/pandroid/app/src/main/res/xml/general_preference.xml @@ -23,6 +23,16 @@ app:title="@string/pref_game_folders" app:summary="@string/pref_game_folders_summary" app:iconSpaceReserved="false"/> + + Date: Fri, 25 Oct 2024 09:32:28 -0400 Subject: [PATCH 19/20] Rename aes_key to aes_keys (#621) --- .../panda3ds/pandroid/app/preferences/GeneralPreferences.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java index cf16bc50..86182c3b 100644 --- a/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java +++ b/src/pandroid/app/src/main/java/com/panda3ds/pandroid/app/preferences/GeneralPreferences.java @@ -45,7 +45,7 @@ public class GeneralPreferences extends BasePreferenceFragment implements Activi private void refresh() { setSwitchValue("behavior.pictureInPicture", GlobalConfig.get(GlobalConfig.KEY_PICTURE_IN_PICTURE)); - setSummaryValue("games.aes_key", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/aes_keys.txt") ? R.string.file_available : R.string.file_not_available), "aes_key.txt")); + setSummaryValue("games.aes_key", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/aes_keys.txt") ? R.string.file_available : R.string.file_not_available), "aes_keys.txt")); setSummaryValue("games.seed_db", String.format(getString(FileUtils.exists(FileUtils.getPrivatePath()+"/sysdata/seeddb.bin") ? R.string.file_available : R.string.file_not_available), "seeddb.bin")); } From 48f286334c3fcff033752791ef11197690cfc663 Mon Sep 17 00:00:00 2001 From: Eric Warmenhoven Date: Wed, 30 Oct 2024 21:38:17 -0400 Subject: [PATCH 20/20] libretro: win32 build fix --- include/align.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/align.hpp b/include/align.hpp index 6b79a656..2f9a33db 100644 --- a/include/align.hpp +++ b/include/align.hpp @@ -7,7 +7,7 @@ #include "helpers.hpp" -#ifdef _MSC_VER +#ifdef _WIN32 #include #endif @@ -77,7 +77,7 @@ namespace Common { } ALWAYS_INLINE static void* alignedMalloc(size_t size, size_t alignment) { -#ifdef _MSC_VER +#ifdef _WIN32 return _aligned_malloc(size, alignment); #else // Unaligned sizes are slow on macOS. @@ -96,4 +96,4 @@ namespace Common { free(ptr); #endif } -} // namespace Common \ No newline at end of file +} // namespace Common